MySQLには、様々なシステム変数が存在します。
これらは、my.cnfなどの設定ファイルやMySQLの起動時オプションで
制御することが可能です。
システム変数は、以下のSQL文で参照できます。
SHOW VARIABLES; SHOW VARIABLES like 'charset%';
また、以下のSQL文で更新できます。
SET GLOBAL sort_buffer_size = 10 * 1024 * 1024; SET SESSION sort_buffer_size = 10 * 1024 * 1024;
システム変数には、サーバ共通の値と
セッション(接続)共通の値とがあります。
前者を変更すると、その後開かれる全てのセッションに影響があります。
後者を変更すると、現在のセッションでのみ影響があります。
以下、MySQL5.0.16に対応したシステム変数一覧です。
MySQL5.0.2から導入されました。
自動インクリメントの間隔値を設定します。
デフォルトは1です。
MySQL5.0.2から導入されました。
自動インクリメントのオフセット値を設定します。
デフォルトは1です。
空のテーブルにレコードを3件挿入すると、その結果は
(5,6,7) となります。
空のテーブルにレコードを3件挿入すると、その結果は
(5,10,15) となります。
既に(11,12)という値が入ったテーブルにレコードを3件挿入すると、その結果は
(11,12,15,20,25) となります。
基準パスを指定します。これはMySQLがインストールされているディレクトリを指します。--basedir オプションによって起動時に設定できます。
使用するデータベースルートのパスを指定します。--datadir オプションによって起動時に設定できます。
スレーブサーバがレプリケーションデータを読み込むときに
使用されるテンポラリディレクトリのパスを指定します。
テンポラリファイルの作成に使用されるディレクトリのパスを指定します。
MySQL4.1以降では、複数のパスを指定することが可能です。
Unixではコロン(:)、Windows等ではセミコロン(;)を区切り文字にします。
この場合、これらのパスはラウンドロビン方式で利用されます。
MySQLがスレーブサーバとして起動している場合、このパスに
メモリベースのディレクトリや
一部Unix系ディストリビューションでの/tmpのような
OS再起動時に内容が消去されてしまうディレクトリを指定すべきではありません。
スレーブサーバは、サーバ起動時にOSを再起動されたときに
テンポラリテーブルをレプリケーション中だったり
LOAD DATA INFILE 文を処理中だったりした場合、
それに対応するためにいくつかのテンポラリファイルを必要としているからです。
この場合、テンポラリディレクトリにあるファイルがOS再起動によって削除されてしまうと
その後のレプリケーションが失敗します。
MySQL4.0.0以降では、スレーブサーバが使用するテンポラリディレクトリを
slave_load_tmpdir 変数として指定することが出来ます。
これによって、tmpdir にそのようなパスを指定しても
slave_load_tmpdir に適切な(OS再起動時に内容が失われない)パスを
指定しておけば、スレーブサーバはそのパスを使用することになります。
INSERTとSELECTの同時実行が可能かどうかを返します。
--safe-mode や --skip-concurrent-insert オプションを付けてmysqldを起動すると
0に設定されます。
サーバ起動後の変更は出来ません。
同時実行を行いません。
同時実行を行います(デフォルト)。ただし、常に同時実行が行われるわけではありません。
MySQL5.0.6から導入されました。
常に同時実行が行われるようにします。
まだ実装されていません。
まだ実装されていません。
WEEK() 関数を使用したときのデフォルトフォーマット形式を設定します。
CREATE TABLE 文で使用される DELAY_KEY_WRITE オプションの扱い方を指定します。
DELAY_KEY_WRITE オプションは無視されます。
DELAY_KEY_WRITE オプションは有効にしてテーブルを作成します(デフォルト)。
指定に関わらず、全てのテーブルで DELAY_KEY_WRITE オプションが
付けられたかのようにテーブルを生成します。
このオプションはMyISAMテーブルでのみ有効です。DELAY_KEY_WRITE が有効になっているテーブルでは
インデックスが更新されたときに即座にキーバッファのフラッシュが行われず
テーブルが閉じられたときに初めてフラッシュされます。
このオプションは大量のインデックスを更新するときなどに
スピードアップを図れますが、不慮の事故により
MySQLがダウンしたときなどに不完全なキーバッファが作成される可能性があります。
その為、MySQLサーバ起動時に --myisam-recover などのオプションを付けて
起動することが勧められています。
キーバッファはレコードの内容から再生成することが可能ですので
これにより完全なキーバッファを常に保証できます。
MySQL5.0.6から導入されました。
DIV演算子(/)による演算のときに計算される小数点以下の桁数を指定します。
デフォルトは 4 です。
SELECT 1/7 -> 0.1429 SET div_precision_increment = 12; SELECT 1/7 -> 0.142857142857
各SQLコマンド実行後、ディスクへの変更をすべてフラッシュします。--flush オプションによって起動時に設定できます。
この値を0以外にすると、
この秒数ごとに全テーブルのリソースを開放して
同期が取れていないデータをディスクに書き込みます。
このオプションは、リソース容量が少ないWindows 95/98/MEなどでの
使用が勧められています。
GROUP_CONCAT() 関数の返却値で可能な最大文字数を指定します。
接続を開く度に実行するSQL文を記述します。
サーバ起動時に実行するSQL文を記述したファイル名を返します。--init-file オプションによって起動時に設定します。
スレーブサーバのSQLスレッドが開始する度に実行するSQL文を記述します。
エラーメッセージに使用される言語を指定します。
この値を1にすると、
全ての INSERT / UPDATE / DELETE / LOCK TABLE WRITE 文は
対象テーブルに影響する SELECT / LOCK TABLE READ 文が発行されている場合に
その発行が完了するまで待機します。
この値が1の場合、全てのテーブル名は小文字に変換されて格納され
MySQLサーバは大小文字の区別をしません。
Windowsの場合、デフォルトでこの値は1になっています。
最大パケットサイズを指定します。
パケットメッセージバッファは net_buffer_length バイトの容量で初期化されますが
必要に応じてこの値まで拡張することが許されます。
この値のプロトコル制限値は 1GB です。
SHOW ERRORS や SHOW WARNINGS で表示するエラーや警告の最大数を指定します。
MEMORY(HEAP)型テーブルに使用される最大メモリサイズを指定します。
この値は、これらのテーブルの MAX_ROWS を計算するのに使われます。
既存のテーブルには何も影響しません。
この値を超える行数のレコードを読み取ろうとした場合にエラーを発生します。
大量のレコードを抽出するSELECT文を間違って発行してしまった場合など、
この値を設定しておくことによってサーバへの無駄な負荷を軽減させることが出来ます。
クエリの結果がクエリキャッシュ内にあった場合、
結果レコード数のチェックは行われません。
この場合、max_join_size を超えるレコードがクライアントに返される事もあります。
キャッシュからの返却ならば、サーバへの負荷はほとんど発生しません。
どのソートアルゴリズムを使うかを決定するために
インデックス値の最大サイズを指定します。
キー(インデックス)によるレコード検索時の
予想される最大シーク数を制限します。
通常、テーブルスキャンよりもキースキャンの方が速いのですが
レコード数が少ない場合に限ってはテーブルスキャンの方が速い可能性があります。
この値を低く(100程度?)することにより、MySQLはこういった場合でも
(テーブルスキャンではなく)キースキャンを優先するようになります。
TEXTまたはBLOBカラムをソートするときに使用するバイト数。
先頭から max_sort_length バイトのみが利用され、残りは無視されます。
デフォルトは1024です。
1クライアントが同時に開いておけるテンポラリテーブルの最大数。
このオプションはまだ未実装です。
ロックを必要とする大量のテーブル書き込みがある場合、
MySQLはこの回数の書き込みロックをした後に、読み取りロックを許可します。
MySQL4.1.2から導入されました。
CREATE TABLE 時、MAX_ROWS オプションが指定されなかったときの
テーブル内部ポインタサイズを指定します。
これにより、テーブルの最大物理サイズが決定します。
デフォルト値は6(MySQL5.0.6以前では4)です。
これは最大65536TB(4GB)のテーブルが作成可能なことを意味します。
REPAIR TABLE 文実行時など、MyISAMテーブルのインデックスが再生成されるときに
使用されるテンポラリファイルの最大サイズをバイト単位で指定します。
ファイルサイズがこの値を超えると、キーキャッシュを利用した再生成が行われ
処理が遅くなります。
--myisam-recover オプション値の値を返します。
この値が1より大きいとき、
MyISAMテーブルインデックスの修復は
インデックス毎にスレッドが生成されて並列的に行われます。
この動作はまだalpha段階です。
MySQL5.0.14から導入されました。
MyISAMテーブルでインデックス分布の統計を集計するとき、NULL値の扱いを決定します。
次のいずれかの値を取ります。
全てのNULLインデックス値は同値として扱われ、
NULL値の数と同じサイズを持った単一のグループを生成します。
MySQL5.0.14以前のバージョンでは、常にこの動作をします。
NULL値同士は同値として扱われず、サイズ1のグループが
NULL値の数と同じ数だけ生成されます。
MySQL5.0.3から導入されました。
範囲指定のSELECT文が発行されたとき、ストレージエンジンに送る範囲の最大値を指定します。
デフォルト値は256です。
複数の範囲指定をストレージエンジンに送ることは
特定のSELECT文に関して(特にNDBCLUSTER)、
将来劇的なパフォーマンス改善がある可能性があります。
MySQL4.0において、MySQL4.1と同様の振舞いをするかどうかを返します。
MySQL5では、この値は常に OFF を返します。
サーバがMySQL4.1以前のパスワード形式を使用するかどうかを返します。
古いサーバにしか対応していないクライアントから接続するためには
必要なオプションですが、なるべくなら新パスワード形式に対応した
クライアントを使いましょう。
これは変数ではありません。いくつかの変数に値をセットするときに使われます。
mysqldがオープンできるファイル数を返します。
これはシステムが実際にオープンできるファイル数を示していて、
サーバ起動時に指定した値とは異なる可能性があります。
MySQLがオープンするファイルの数を変更できない場合、この値は0になります。
MySQL5.0.1から導入されました。
クエリ最適化方法を制御します。詳細は不明です。
MySQL5.0.1から導入されました。
クエリ最適化ルーチンが実行する検索の深さの最大値を指定します。
詳細は不明です。
mysqldサーバのpidファイルパスを返します。--pid-file オプションによって起動時に設定できます。
mysqldサーバが利用するTCP/IPポート番号を返します。--port オプションによって起動時に設定できます。
MySQL5.0.16から導入されました。
レプリケーションスレーブサーバにおいてこの値が ON に設定されると
このサーバではスレーブのSQLスレッド以外からのレコード更新を全て禁止します。
この動作は TEMPORARY テーブルでは機能しません。
リレーログが不必要になったときの自動削除フラグを設定します。
デフォルトは 1(enabled) です。
--secure-auth オプションを付けてサーバを起動すると
MySQLサーバは古い形式(4.1以前)のパスワードによる認証を許可しません。
このとき、この値は ON になります。
--server-id オプションで指定した値を返します。
この値はレプリケーションサーバ(マスタ/スレーブ共)で使用されます。
Windows特有の値です。
共有メモリに付ける識別子を指定します。
この値は、一つのPCで複数のMySQLサーバを起動するときに使われます。
mysqldが外部ロックを使用するとき、この値は OFF になります。
この値をONにすると、サーバはローカル接続のみを許可します。
ローカル接続とは、Unixにおいてはソケットファイルによる接続、
Windowsでは名前パイプもしくは共有メモリを使った接続のことです。
ONにすると、SHOW DATABASES 権限を持たないユーザが
SHOW DATABASES 文を使うことを禁止します。
OFFにすると、全てのユーザがこの文を発行できますが
その際ユーザが権限を持つデータベースしか表示されません。
マスタ/スレーブ接続からデータを読み込むとき、
読み込みを中断するまでの秒数を指定します。
レプリケーションエラーをスレーブサーバが無視するかどうかを指定します。
スレーブのSQLスレッドが何らかの原因により
トランザクション実行に失敗した場合、
再試行を行う回数を指定します。
デフォルトは 10 です。0にすると、再試行は全く行われません。
スレッドを作成するのにこの値(秒数)以上の時間が掛かった場合、
サーバは Slow_launch_threads ステータス変数をインクリメントします。
Unix環境では、ローカル接続に使用されるソケットファイルパスを表します。
Windows環境では、ローカル接続に使用される名前付きパイプ名を表します。--socket オプションによって起動時に設定できます。
現在のSQLモードを返します。
この値は動的に変更することが可能です。
スレーブサーバが無視するべきマスタからのイベント数を返します。
table_type のシノニム(別名)です。
デフォルトのテーブルタイプ(ストレージエンジン)を返します。
MySQL5.0 では、こちらの方を使いましょう。
この値を1(デフォルト)にすると
テンポラリ以外のテーブルを作成したときにその .frm ファイルを
ディスクへ同期させます。
これはわずかに処理を遅くしますがクラッシュに対して安全です。
テーブルを頻繁に作成する場面などそう無いはずですから、
デフォルトのままで問題無いはずです。
MySQLサーバのシステムタイムゾーンを返します。
サーバは起動するとき、基本的にマシンのデフォルトタイムゾーンを継承しますが
サーバを起動したユーザアカウントの環境や
スタートアップスクリプトのオプションによってそれを変更します。
通常、タイムゾーンは TZ 環境変数に設定されています。
mysqld_safeスクリプト実行時に --timezone オプションで指定することも出来ます。
キャッシュする最大テーブル数を指定します。
この値を増加させると、mysqldが必要とするファイル記述子の数が増加します。
Opened_tables ステータス変数を確認することで
この値をどの程度の数値にするか決定できます。
もしこのステータス変数値が大きいなら、この値を大きくすべきです。
デフォルトのテーブルタイプ(ストレージエンジン)を返します。
この値を変更するには、サーバ起動時に--default-table-type オプションを使用します。
MySQL5以降では代わりに storage_engine を使いましょう。
再利用のためにキャッシュ可能なスレッドの数を指定します。
クライアントが接続を閉じたとき、そのスレッド(接続)は
この値を超えない限りキャッシュに格納されます。
以降、スレッド要求は可能な限りこのキャッシュに格納されたスレッドを使い
新たにスレッドを生成するのはキャッシュが空の場合に限られます。
大量の新しい接続を必要とする場合、この値を大きくすることで
パフォーマンスを増加させることが可能です。
(通常、OSが効率の良いスレッド生成を実装していれば
これによってそれほどパフォーマンスが向上することはありません)
Connections と Threads_created ステータス変数値を比較することによって
スレッドキャッシュがどの程度効率良く働いているかを調べることができます。
Solarisにおいて、この値をONにすることで
mysqldは同時に実行すべきスレッド数に関するヒントをスレッドに提供します。
各スレッドのスタックサイズを返します。
crash-me テストで検出された制限値の多くがこの値に依存しています。
デフォルトでは、通常動作を行うには充分すぎる値が設定されています。
まだ実装されていません。
現在のタイムゾーンを返します。
この値の初期値は 'SYSTEM' ですが
サーバ起動時に --default-time-zone オプションを指定することで
変更することが出来ます。
メモリ内に生成されるテンポラリテーブルがこのサイズを超えるとき、
MySQLは自動的にそのテーブルをMyISAMテーブルに変換してディスクに格納します。
もし、たくさんの複雑なGROUP BYクエリを発行する必要があり
メモリに余裕があればこの値を大きくしましょう。
基準となるトランザクション隔離レベルを返します。
デフォルト値は REPEATABLE-READ です。
MySQL5.0.2から導入されました。
基準となるテーブルにプライマリキーを含まないビューを
更新するUPDATE/DELETE文にLIMIT句が含まれていた場合に、
更新の許可するかどうかを制御します。
(GUIツールは時々このようなUPDATE/DELETE文を発行します)
警告メッセージは表示しますが、このような更新を許可します(デフォルト)。
エラーメッセージを表示して、このような更新を禁止します。
個人的には、全てのテーブルにプライマリキーを付けるのが
MySQLにおけるテーブル管理の基本だと思うので、是非そうしましょう。
使用するファイルシステムが大小文字の区別をするかどうかを返します。
Windows専用の値です。
サーバが名前パイプを通じた接続をサポートするかどうかを返します。
MySQLサーバによって使われるクライアント/サーバ間の
プロトコルバージョン番号を返します。
Windows特有の値です。
サーバが共有メモリによる接続を許可するかどうかを返します。
マスタとスレーブの両方が圧縮プロトコルをサポートしているかどうかを返します。
MySQLサーバのバージョン番号を返します。
BDBストレージエンジンのバージョン番号を返します。
MySQLサーバのバージョンコメントを返します。
これは、コンパイル時に --with-comment オプションを付けることで
指定することが出来ます。
このMySQLがコンパイル/ビルドされたマシンの種類を返します。
このMySQLがコンパイル/ビルドされたOSを返します。
INSERT DELAYED構文により発行されたレコードは
テーブル毎に生成されたキューに格納されていきます。
そして、テーブルが他のスレッドによって使用されていないときを見計らって
キューに溜まったレコードを一気にテーブルに挿入します。
運悪くこのタイミングでSELECT文が発行された場合には
SELECT文はハンドラが全てのレコードを挿入し終るまで待たなければなりません。
これを解消するために、この変数を利用することができます。
ハンドラはこの値の数だけレコードを挿入する度に
待機しているSELECTステーメントが無いかどうか確認します。
もしあれば、残りのレコードをINSERTする前にそのSELECTステートメントを実行します。
INSERT DELAYEDハンドラがINSERTステートメントを待機する時間を指定します。
一つのテーブルに対応するハンドラキューに登録できるキューの最大値を指定します。
キューに登録されたレコード数がこの値の数に達すると、
クライアントはそのキューに空きが出来るまで待機します。
INSERT DELAYED 文で作成されるスレッド(ハンドラ)の最大数を指定します。
ハンドラ数が最大に達した後で DELAYED 文を発行すると、
それは DELAYED が付いていないものとして処理されます。
この値を0にすると、mysqldはハンドラを一つも作成しません。
つまり、INSERT DELAYED 文は無効になります。
bulk insert で使われるバッファサイズを指定します。
bulk insertとは、INSERT ... SELECT や LOAD DATA INFILE などの
一括レコード挿入の事を指します。
ただし、空テーブルにレコード挿入をするときはこのバッファは使われません。
このサイズを0にすると、bulk insert時に最適化が行われなくなります。
デフォルトは 8MB です。
フルジョイン(インデックスが使用されない結合)に使われる
バッファサイズを指定します。
もちろん、通常この場合の最良の解決策は新たなインデックスを追加する事です。
それが不可能な場合にのみ、この値で調整しましょう。
インデックスブロック用に使用するバッファのサイズ。
インデックスを使う(つまりほとんど全ての)クエリは
この値によってパフォーマンスが大きく変わります。
よって、この値は可能な限り(もちろん稼動システムの許容範囲内で)
大きくすることが推奨されています。
適切なバッファサイズを求めるには、SHOW STATUS コマンドを利用します。
ここで表示された Key_read_requests が、キャッシュからのキーブロック読み取り要求回数です。Key_reads は、ディスクからのキーブロック読み取り要求回数です。
つまり、Key_reads / Key_read_requests が「キャッシュミスレート」になります。
この値は0.01を下回ることが良いとされています。
このときキャッシュミスレートは1%以下です。
これを上回るようだったら、
インデックスブロックのバッファサイズを大きくすることを検討しましょう。
キャッシュヒット率99%と95%のサーバがあった場合、
これらのパフォーマンス比は一体どれくらいになるでしょうか。
答えは「約5倍」です。
なぜなら、「キャッシュに失敗したときが、サーバが仕事している時」だからです。
上の数値を「キャッシュミス率」で表わすと、それぞれ1%と5%になります。
つまり、5 / 1 = 5 がおおよそのパフォーマンス比です。
詳細は不明です。
キーキャッシュのブロックサイズをbyte単位で指定します。
デフォルトは 1024 です。
詳細は不明です。
REPAIR TABLE 文実行時など、MyISAMテーブルのインデックスがソートされるときに
割り当てられるバッファのサイズを指定します。
クエリ間でリセットされる通信バッファのサイズを指定します。
この値は通常大きくするべきではありませんが、
非常に少ないメモリしか無い場合には、クライアントから発行される
SQL文の長さに応じたサイズに指定することができます。
SQL文がこのサイズより大きい場合、通信バッファは自動的に
最大 max_allowed_packet まで拡張します。
インデックスをプレロードするときに割り当てられるバッファサイズ。
クエリを解析し実行するときに生成されるオブジェクトのために
割り当てられるメモリブロックのサイズを指定します。
もしメモリフラグメントに問題を感じるようなら、
この値を変えることでそれを解決できるかもしれません。
クエリの解析および実行に使われる永続バッファのサイズ。
このバッファはクエリ間で開放されません。
もし頻繁に複雑なクエリを発行するなら、この値を大きくすることで
クエリ実行時のメモリ割り当て回数を減らすことが出来る為
パフォーマンスを改善できるかもしれません。
範囲最適化を行うときに割り当てられるブロックサイズを指定します。
シーケンシャル(全件)スキャンを行うときにスレッドが割り当てる
バッファサイズをバイト単位で指定します。
デフォルトは 131072 です。
ソートされたレコードを読み出すときのバッファサイズを指定します。
この値を大きくすることにより、大量のレコードをORDER BYしたときの
パフォーマンスが改善します。
しかし、このバッファは全てのクライアントに割り当てられるため
グローバル値を大きな値に変更すべきではありません。
代わりに、必要なときだけセッション値を変更するようにしましょう。
それぞれのスレッドがソート時に使用するバッファのサイズを指定します。
この値を大きくすることで、ORDER BY や GROUP BY の速度を上げることが出来ます。
これもグローバル値ではなくセッション値で調節しましょう。
メモリブロックの割り当てサイズをbyte単位で指定します。
このメモリは、コミットするときにバイナリログへ書き込むための
トランザクション内クエリを保存するために使用されます。
transaction_alloc_blocks と呼ばれる
永続的バッファのサイズを指定します。
このバッファはクエリ間で開放されません。
この値を大きくすることによって、単一トランザクションに含まれる
全てのクエリをバッファ内に収めることが出来るので
多くの malloc() システムコールが発行されるのを避けることが出来ます。
MySQL4.1以降、やや複雑になった文字コード関連。
文字化けなどで困ったときにはこれらの値を確認しましょう。
クライアントから送信される文字列の文字コードを指定します。
これが正しく設定されていないと、INSERT文などによるレコード挿入時に
文字化けが発生するでしょう。
文字コード情報を持っていないリテラルや
数値→文字への変換時に使われる文字コードを指定します。
デフォルト(カレント)データベースの文字コードを返します。
デフォルトデータベースが変化する度に、サーバはこの値を変更します。
デフォルトデータベースが存在しない場合、この値は
character_set_server と同じになります。
クライアントへ返す文字列の文字コードを指定します。
これが正しく設定されていないと、SELECT文などによるレコード取得時に
文字化けが発生するでしょう。
サーバのデフォルト文字コードを指定します。
識別子を書き出すのにサーバが使用する文字コードです。
この値は常に utf8 になります。
文字コード情報が格納されたディレクトリ名を指定します。
現在のcollation(照合順序)を指定します。
デフォルト(カレント)データベースの collation を返します。
デフォルトデータベースが変化する度に、サーバはこの値を変更します。
デフォルトデータベースが存在しない場合、この値は
collation_server と同じになります。
サーバのデフォルト collation を指定します。
最大同時接続要求数。
この値は「最大接続数」とは異なります。
具体的には、TCP/IP接続のリッスンキューのサイズになります。
非常に短い間に大量の接続があるという特殊な場面でのみ
指定する必要があるでしょう。
MySQL5.0.3から導入されました。
トランザクション完了種別を指定します。
デフォルト値です。COMMIT および ROLLBACK 文は機能しません。
COMMIT / ROLLBACK はそれぞれ、
COMMIT AND CHAIN / ROLLBACK AND CHAIN
として機能します。
COMMIT / ROLLBACK はそれぞれ、
COMMIT RELEASE / ROLLBACK RELEASE
として機能します。
接続タイムアウトまでの秒数。
デフォルトは5秒です。
接続先から何の要求もないままこの秒数が経過すると、サーバは接続を自動的に切断します。
デフォルトは28800秒、つまり8時間です。
あるホストからの接続中断回数がこの値より大きくなると、
mysqldは以後そのホストからの接続をブロックします。
ホストブロックを解除するには、FLUSH HOSTS 構文を使用します。
MySQLへの最大同時接続数。デフォルトは100です。
この数値を増加させると、mysqldが必要とするファイル記述子が増加します。
単一ユーザ(MySQLアカウント)が同時に接続できる最大数を返します。
0にすると、ユーザによる同時接続数の制限はありません。
MySQL5.0.3以前、この値はグローバルスコープのみでしたが
それ以降のMySQLではこの値は読み込み専用のセッションスコープも持っています。
セッション値は通常グローバル値と同じ値ですが、
セッションユーザが0以外のMAX_USER_CONNECTIONS値を持っていた場合には
その値にセットされます。
反応の無い接続を閉じるまでの秒数を指定します。
読み込みを停止するまでに、接続からのデータを待機する秒数を指定します。
クライアントからの読み込み待機時にこの値は利用されます。
クライアントからの書き込み待機時には net_write_timeout が利用されます。
通信ポートからの読取が中断したときのリトライ回数を指定します。
FreeBSDでは、一つの接続(スレッド)での内部中断が
全てのスレッドに通知されるため、この値を大きくするべきです。
書き込みを中断するまでに、ブロックが
接続に書き込まれるのを待つ秒数を指定します。
全てのクエリをログ出力する設定になっているかどうかを返します。
エラーログの出力場所を返します。
スレーブサーバがマスタサーバから受け取った更新を
スレーブサーバ自身のバイナリログに記録するかどうかを指定します。
このようにすることで、このスレーブをマスタとしたレプリケーションを
行うことが可能になります。
スレーブ上でバイナリログを有効にしておく必要があります。
実行に時間の掛かるSQL(スロークエリ)のログを出力するかどうかを返します。
警告メッセージに追加情報を表示するかどうかを指定します。
これはデフォルトで有効になっています。
この値が1より大きくないと、接続を中断した情報がエラーログに出力されません。
スロークエリの対象となるSQL文の実行秒数を指定します。
デフォルトは10秒です。
スロークエリが発行されると、Slow_queries ステータスがインクリメントされます。
リレーログのローテートファイルサイズを指定します。
トランザクション間でメモリに保持するSQL文の最大数。
デフォルトでは32768です。
これ以上のSQL文を単一トランザクション間に発行する場合、
この値を大きくすることで
バイナリログ出力によるパフォーマンス低下を減少させることが出来ます。
バイナリログを自動削除する日数を指定します。
デフォルトは0です。この場合ログファイルは自動削除されません。
ログを削除するタイミングは、MySQLサーバ起動時もしくは
ログをローテートするときに限られるので
この日数が経過したからといって即座にログファイルが削除されるとは限りません。
バイナリログ出力する設定になっているかどうかを返します。
MySQL5.0.16から導入されました。
この値はバイナリログが有効のときに適用されます。
Stored Function(以下関数)を作成できるユーザが、
信用できない関数を作成する可能性があるかどうかを制御します。
関数の内容によっては、
危険な状況を引き起こすようなバイナリログへの書き込みがなされる事があります。
この値を0(デフォルト)にすると、
SUPER および CREATE ROUTINE(ALTER ROUTINE) 権限を持たないユーザは
関数を作成(更新)することを許可されません。
0にすることはまた、関数を
DETERMINISTIC / READS SQL DATA / NO SQL のいずれかの特性を持った
形で作らなければならないという事を意味します。
この値を1にすると、そのような制限は課せられません。
MySQL5.0.6から導入されました。
が、MySQL5.0.16では非推奨(deprecated)となっています。
代わりに log_bin_trust_function_creators を使いましょう。
バイナリログに使用するキャッシュの最大サイズを指定します。
バイナリログのローテートファイルサイズを指定します。
デフォルトは 1GB です。
この値は4096byte〜1GBの範囲で設定する必要があります。
この値が正数の場合、
MySQLサーバはバイナリログへこの回数書き込む毎にディスクへ同期(FLUSH)します。
オートコミットモードでは、一つのSQL文を発行する度にログ書き込みが行われ
それ以外のモードでは、トランザクション単位で書き込みが行われます。
デフォルト値は0で、この場合ディスクへの明示的な同期は行われません。
同期タイミングはOSに委ねられます。
1にすると最も安全にログ書き込みを行いますが、パフォーマンスは最も悪くなります。
クエリキャッシュに関する変数です。
デフォルトでは、クエリキャッシュは無効になっています。
query_cache_size を指定することにより、クエリキャッシュが有効になります。
この値(byte数)より大きい結果はキャッシュしません(デフォルトは1M)。
クエリキャッシュにより割り当てられるブロックの最小サイズをバイト単位で指定します。
デフォルトは 4096(4KB) です。
小さな結果セットのクエリを大量に発行する場合などは、
この値を小さくすることでキャッシュの効果を上げることが出来る可能性があります。
クエリキャッシュで確保するメモリ(byte数)を指定します。
デフォルトでは0になっていて、この場合クエリキャッシュは無効になります。
クエリキャッシュを行う条件を指定します。
キャッシュを使用しません。
SQL_NO_CACHE キーワードを使わない全てのSELECT文を対象とします(デフォルト)。
SQL_CACHE キーワードを指定したSELECT文のみを対象とします。
通常、あるクライアントがテーブルの書き込みロックを獲得したとき
他のクライアントは(クエリの結果がキャッシュ内にあれば)
そのテーブルへのクエリ発行を邪魔されません。
この値を1にすることで、
そのテーブルに関する全てのクエリキャッシュを無効にする形で
書き込みロックの獲得を行います。
例えば、大量のレコード更新SQLを発行した場合を考えます。
通常、この間に他のクライアントがSELECT文を発行したら
更新が終わるまでは以前までのクエリキャッシュを利用できてしまいます。
この値を1にすることで、
SELECT文を発行したクライアントは更新が完了するまで
待つことになりますが、その後更新後のレコード結果を取得することが出来ます。
IN BOOLEAN MODE を使用したブーリアン全文検索時にサポートする
演算子一覧を返します。
デフォルトは '+ -><()~*:""&|' です。
この値を変更するときは、次のルールに従う必要があります。
ただし、11,12個目のクオート文字は重複していても構いません。
FULLTEXTインデックスに含まれる単語の最大文字数を指定します。
※ この値を変更したら、REPAIR TABLE tbl_name QUICK
によって全てのFULLTEXTインデックスを更新する必要があります。
FULLTEXTインデックスに含まれる単語の最小文字数を指定します。
※ この値を変更したら、REPAIR TABLE tbl_name QUICK
によって全てのFULLTEXTインデックスを更新する必要があります。
WITH QUERY EXPANSION を使った全文検索で使用される最上位マッチ数。
全文検索時にストップワードとして使用される単語の一覧が格納されたファイル。
このファイルに記述された全ての単語が使用されます。
※ コメントは使用しない方が良いという意味だと思います
デフォルトでは、MySQLサーバにビルトインされたストップワードが使用されます。
mysqld が ARCHIVE テーブルをサポートしているかどうかを返します。
mysqld が BDB テーブルをサポートしているかどうかを返します。--skip-bdb オプションを付けていると、この値は DISABLED を返します。
mysqld が BLACKHOLE テーブルをサポートしているかどうかを返します。
mysqld が zlib圧縮をサポートしているかどうかを返します。
この値が NO のとき、COMPRESS() と UNCOMPRESS() 関数は使用できません。
mysqld が crypt() システムコールをサポートしているかどうかを返します。
この値が NO のとき、CRYPT() 関数は使用できません。
mysqld が EXAMPLE テーブルをサポートしているかどうかを返します。
MySQL5.0.3から導入されました。
mysqld が FEDERATED テーブルをサポートしているかどうかを返します。
MySQLサーバが spatial データ型をサポートしているかどうかを返します。
mysqld が InnoDB テーブルをサポートしているかどうかを返します。--skip-innodb オプションを付けていると、この値は DISABLED を返します。
mysqld が ISAM テーブルをサポートしているかどうかを返します。
MySQL5ではもうこのテーブルをサポートしていません。
よって、常に NO を返します。
mysqld が NDB Cluster テーブルをサポートしているかどうかを返します。--skip-ndbcluster オプションを付けていると、この値は DISABLED を返します。
mysqld が SSL をサポートしているかどうかを返します。
mysqld がクエリキャッシュをサポートしているかどうかを返します。
mysqld がRAIDオプションをサポートしているかどうかを返します。
RTREE インデックスが利用できるかどうかを返します。
シンボリックリンクをサポートしているかどうかを返します。
DATA DIRECTORY と INDEX DIRECTORY テーブルオプションのサポートには
これが必要になります。
ラージファイルをサポートしているかどうかを返します。
MySQL5.0.3から導入されました。
ラージページをサポートしているかどうかを返します。
このサーバのライセンス種別を返します。
LOAD DATA INFILE 文で、LOCAL の使用を許可しているかどうかを返します。
--memlock によるメモリロックが有効かどうかを返します。