次のコマンドを使用して、mysqld サーバーのデフォルトのバッファ サイズを取得できます:
shell> mysqld --help
このコマンドは、すべての mysqld オプションと構成可能な変数のテーブルを生成します。出力にはデフォルト値が含まれており、次のようになります:
オプション --set-variable (-O) の可能な変数は次のとおりです:
back_log???????現在の値: 5
connect_timeout???現在の値: 5
layed_insert_timeout?現在の値: 300
layed_insert_limit?現在の値: 100
layed_queue_size??現在の値: 1000
flush_time??????現在の値: 0
interactive_timeout? 現在の値: 28800
join _buffer_size???current値: 131072
key_buffer_size???現在の値: 1048540
lower_case_table_names?現在の値: 0
long_query_time???現在の値: 10
max_allowed_packet??現在の値: 1048576
max_connections???現在の値: 10 0え??現在の値: 10
max_layed_threads? 現在の値: 20
max_join_size???? 現在の値: 1024
max_tmp_tables????
max_write_lock_count?現在の値: 4294967295
net_buffer_length?? 現在の値: 0
record_buffer?? 現在の値: 2097116
table_cache?? : 64
thread_concurrency??現在値: 10
tmp_table_size????現在値: 1048576
thread_stack?????現在値: 131072
wait_timeout?????現在値: 28800
mysqldサーバーがある場合このコマンドを実行すると、実際に使用されている変数の値を確認できます:
shell> mysqladmin 変数
各オプションについては以下で説明します。バッファ サイズ、長さ、およびスタック サイズの値をバイト単位で指定する場合は、接尾辞「K」または「M」を使用して、値が K バイトまたはメガバイトで表示されることを示すことができます。たとえば、16M は 16 メガバイトを示します。接尾辞の大文字と小文字は関係ありません。16M と 16m は同じです。
コマンド SHOW STATUS を使用して、実行中のサーバーからの統計を確認することもできます。 「7.21 SHOW 構文(テーブルおよびカラム情報の取得)」を参照してください。
back_log
には、MySQL が持つことができる接続の数が必要です。これは、MySQL のメイン スレッドが短期間に多くの接続リクエストを受信し、メイン スレッドが接続を確認して新しいスレッドを開始するのに (短時間ではありますが) 時間がかかる場合に機能します。 back_log 値は、MySQL が一時的に新しいリクエストへの応答を停止するまでに、短期間にスタックに保存できるリクエストの数を示します。短期間に多数の接続が予想される場合にのみ、この値を増やす必要があります。つまり、この値は、受信 TCP/IP 接続のリスニング キューのサイズです。オペレーティング システムには、このキュー サイズに対する独自の制限があります。 Unix listen(2) システムコールのマニュアルページに詳細が記載されています。この変数の最大値を確認するには、OS のドキュメントを確認してください。 back_log をオペレーティング システムの制限よりも高く設定しようとしても、効果はありません。
connect_timeout
mysqld サーバーが Bad handshake で応答する前に接続メッセージを待機する秒数。
layed_insert_timeout
Insert DELAYED スレッドが終了する前に Insert ステートメントを待機する時間。
layed_insert_limit
layed_insert_limit 行を挿入した後、Insert DELAYED プロセッサは、Select ステートメントが実行されていないかどうかを確認します。その場合は、続行する前に許可ステートメントを実行してください。
layed_queue_size
挿入 DELAYED の処理に割り当てるキューの大きさ (行数)。キューがいっぱいの場合、Insert DELAYED を実行するクライアントは、キューが再び空になるまで待機します。
flush_time
これがゼロ以外の値に設定されている場合、flush_time 秒ごとにすべてのテーブルが閉じられます (リソースを解放してディスクに同期するため)。
interactive_timeout
サーバーが対話型接続を閉じる前に、対話型接続でのアクションを待機する秒数。インタラクティブクライアントは、mysql_real_connect() の CLIENT_INTERACTIVE オプションを使用してクライアントとして定義されます。 wait_timeout も表示されます。
join_buffer_size
すべての結合 (インデックス付き結合ではない) に使用されるバッファー サイズ。バッファーは、2 つのテーブル間の完全結合ごとにバッファーを割り当てます。インデックスを追加できない場合、この値を増やすと完全結合が高速化される可能性があります。 (多くの場合、結合を高速化するための最良の方法は、インデックスを増やすことです。)
key_buffer_size
インデックス ブロックはバッファリングされ、すべてのスレッドによって共有されます。 key_buffer_size はインデックス ブロックに使用されるバッファ サイズです。(すべての読み取りと複数の書き込みに対して) インデックスをより適切に処理できるように、許容できる範囲で増加させます。サイズを大きくしすぎると、システムがページングを開始し、速度が大幅に低下します。 MySQL は読み取りデータをキャッシュしないため、OS ファイル システム キャッシュ用のスペースを残しておく必要があることに注意してください。複数の行を書き込むときに速度を上げるには、LOCK TABLES を使用します。 「7.24 LOCK TABLES/UNLOCK TABLES 構文」を参照してください。
long_query_time
クエリにこれより長い時間がかかる場合 (秒単位)、Slow_queries カウンターが増加します。
max_allowed_packet
パケットの最大サイズ。メッセージ バッファは net_buffer_length バイトに初期化されますが、必要に応じて max_allowed_packet バイトまで増やすことができます。デフォルトでは、この値は小さすぎるため、大きな (エラーの可能性がある) パケットをキャプチャできません。大きな BLOB 列を使用している場合は、この値を増やす必要があります。使用する最大の BLOB と同じ大きさにする必要があります。
max_connections
許可される同時クライアントの数。この値を増やすと、mysqld に必要なファイル記述子の数が増加します。ファイル記述子の制限については、以下の注を参照してください。 「18.2.4 接続数が多すぎるエラー」を参照してください。
max_connect_errors
ホストからの接続がこの数を超えて切断された場合、このホストはそれ以上の接続をブロックします。 FLUSH HOSTS コマンドを使用してホストのブロックを解除できます。
max_layed_threads
Insert DELAYED ステートメントを処理するために、この数を超えるスレッドを開始しないでください。すべての挿入 DELAYED スレッドが使用された後で新しいテーブルにデータを挿入しようとすると、DELAYED 属性が指定されていないかのように行が挿入されます。
max_join_size
max_join_size を超えるレコードを読み取る可能性のある結合はエラーを返します。ユーザーが Where 句を持たず、時間がかかり、数百万行を返す結合を実行したい場合は、これを設定します。
max_sort_length
BLOB または TEXT 値をソートするときに使用されるバイト数 (各値の最初の max_sort_length バイトのみが使用され、残りは無視されます)。
max_tmp_tables
(このオプションはまだ何も行いません)。クライアントが同時に開いたままにできる一時テーブルの最大数。
net_buffer_length
通信バッファはクエリ間でこのサイズにリセットされます。通常、これは変更すべきではありませんが、メモリが少ない場合は、クエリで予期されるサイズに設定できます。 (つまり、クライアントによって発行される SQL ステートメントの予想される長さ。ステートメントがこの長さを超える場合、バッファーは max_allowed_packet バイトまで自動的に拡張されます。)
record_buffer
スキャンする各テーブルに対して順次スキャンを実行する各スレッドこのサイズのバッファ。大量の連続スキャンを実行する場合は、この値を増やすことをお勧めします。
sort_buffer
ソートする必要がある各スレッドは、このサイズのバッファを割り当てます。この値を増やすと、ORDER BY または GROUP BY 操作が高速化します。 「18.5 MySQL が一時ファイルを保存する場所」を参照してください。
table_cache
すべてのスレッドに対して開かれたテーブルの数。この値を増やすと、mysqld に必要なファイル記述子の数が増加します。 MySQL では、開いている一意のテーブルごとに 2 つのファイル記述子が必要です。以下のファイル記述子の制限に関するコメントを参照してください。テーブル キャッシュの仕組みについては、「10.2.4 MySQL がテーブルをオープンおよびクローズする方法」を参照してください。
tmp_table_size
一時テーブルがこのサイズを超えると、MySQL は「テーブル tbl_name がいっぱいです」という形式のエラーを生成します。高度な GROUP BY クエリを多数実行する場合は、tmp_table_size の値を増やします。
thread_stack
各スレッドのスタック サイズ。 crash-me テストで検出される制限の多くは、この値に依存しています。デフォルトのチームは、一般的な操作には十分な規模です。 「10.8 独自のベンチマークの使用」を参照してください。
wait_timeout
サーバーが接続を閉じる前に接続上のアクションを待機する秒数。また、interactive_timeout も表示されます。
MySQL は非常にスケーラブルなアルゴリズムを使用しているため、通常は少ないメモリで実行することも、MySQL により多くのメモリを与えてパフォーマンスを向上させることもできます。
大量のメモリと多数のテーブルがあり、適度な数のクライアントがあり、最大のパフォーマンスが必要な場合は、次のようなものを使用する必要があります:
shell>safe_mysqld -O key_buffer=16M -O table_cache=128
? ? ???-O sort_buffer=4M -O record_buffer=1M &
メモリが少なく、接続が多い場合は、次のようなものを使用します:
shell>safe_mysqld -O key_buffer=512k -O sort_buffer=100k
?? ???-O Record_buffer=100k &
または:
shell>safe_mysqld -O key_buffer=512k -O sort_buffer=16k
??????-O table_cache=32 -O Record_buffer=8k -O net_buffer=1K &
接続数が多い場合、接続ごとに使用するメモリが非常に少ないように mysqld が設定されていない限り、「スワッピングの問題」が発生する可能性があります。もちろん、すべての接続に十分なメモリがある場合は、mysqld のパフォーマンスが向上します。
mysqld のオプションを変更すると、そのオプションは実際にはサーバーのそのインスタンスに対してのみ存続することに注意してください。
パラメータ変更の影響を理解するには、次の手順を実行します:
shell> mysqld -O key_buffer=32m --help
--help オプションが最後のものであることを確認してください。それ以外の場合は、オプションの後にリストされます。コマンドライン 効果は出力に反映されなくなります。