

ネット上を調べているとMySQLのシステム変数のうち、  
key_buffer_sizeなどはグローバルバッファ  
sort_buffer_sizeなどはスレッドバッファ  
と呼ばれているのが散見されます。  
例: <http://dsas.blog.klab.org/archives/50860867.html>

グローバルバッファorスレッドバッファはどのように判別しているのでしょうか。  
よろしくお願いします。


CC BY-SA 3.0
2015-08-18T06:10:37.523
14573
2015-08-22T11:47:13.143
2015-08-22T11:47:13.143
5337
10903
question
mysql
MySQLのグローバルバッファとスレッドバッファの判別方法


[リファレンス](https://dev.mysql.com/doc/refman/5.6/ja/mysqld-option-
tables.html)を見て判断するといいと思います。  
リンク先の一覧では、「変数スコープ」に、「グローバル」「セッション」「両方」などと書かれています。

_追記_  
ご指摘のとおり、設定のスコープがすなわちメモリの領域を表すとは書かれていませんね。  
どのようにメモリを使うかは、究極的にはソースコードを見るか、チューニングとベンチマークを確認するしかないかもしれませんが、アーキテクチャを把握して、リファレンス等から確認することになると思います。
Oracle
の[資料](http://www.oracle.com/technetwork/jp/ondemand/database/mysql/mysql-
perftun-1484759-ja.pdf)がなかなかわかりやすかったです。

気になったのでドキュメントにどのように書かれているか、確認してみたところ、グローバルスコープの方は、すべてのスレッドが共有する旨が明記されているものと、何も書かれてないものがあります。  
例) key_buffer_size について書いてる箇所 [8.11.4.1. MySQL
のメモリーの使用方法](https://dev.mysql.com/doc/refman/5.6/ja/memory-use.html)

また、セッションスコープのほうはその動作から各バッファがセッション(＝スレッド)ごとに確保されると推測がつきます。

というのは、セッションスコープの変数は、クライアントからの接続のたびに変更でき、あるクライアントでは sort_buffer_size が 100KB
である一方で、別のクライアントは 2MB のバッファーを確保することが可能だからです。  
※my.cnf 等でクライアントごとに設定を分けられるのもこの動作によるものです。

なお、設定のスコープの意味はこちらに書いてあります。  
[4.2.4. システム変数の使用](https://dev.mysql.com/doc/refman/5.6/ja/using-system-
variables.html)

(などと色々貼り付けてお茶を濁したいと思います…;;)


CC BY-SA 3.0
2015-08-18T09:38:04.290
14581
2015-08-18T14:57:20.817
2015-08-18T14:57:20.817
5008
5008
14573
answer