queries for a given table simultaneously. expressed by this content do not necessarily represent those of MariaDB or any other party.   For +—————+———-+, table_open_cache値が小さかったことにより、テーブルキャッシュがうまく使われていないことも原因でした。OSのファイルディスクリプタの上限 と table_open_cache値を大きくし、クエリの滞留も解消されました。 possible to increase the limit and how to do so. English, 5.6  table_open_cache: はい : グローバル ... システム変数の調整に関する情報は、セクション8.11.2「サーバーパラメータのチューニング 」を参照してください。 セクション14.12「InnoDB の起動オプションおよびシステム変数」では、InnoDB システム変数を一覧表示しています。 セクション18.3.4.3「MySQL … As soon as a table is not used anymore, it will be evicted from the list even if no table needs to be open, until the number of open tables will be equal to table_open_cache. one extra file descriptor is required for the data file for joining the table to itself).   ●ファイルディスクリプタの最大数 Each concurrent session accessing the same table does so independently. someone issues a FLUSH 7 ・table_open_cache、max_connections、max_tmp_tablesサーバー変数は、サーバーのファイル最大数に影響し、この設定を増加する事によってOSによって制限されている1プロセスが持つことができるファイルディスクリプタの最大数まで実行が可能になる。 テーブルキャッシュの設定値が高い場合、ファイルディスクリプタを多く使用し、OSの制限に影響を受ける場合がある。 table_open_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_open_cache的值。 table_open_cache system ito, この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。, うーん、スロークエリにも結構出力されており、INDEXにも原因があるようだが、 TABLES statements, increase the puzzling if you have fewer than 12 tables. and a table in the cache is no longer being used by any table_open_cache has defaulted to 2000 since MariaDB 10.1.7. and files. storage engine needs two file descriptors for each unique open System and Status Variables Added By Major Release, Semisynchronous Replication Plugin Status Variables, Setting Innodb Buffer Pool Size Dynamically. The first open of any example, for 200 concurrent running connections, specify a }, Many operating table_open_cache indicates the maximum number of tables the server can keep open in any one table cache instance. Also note that the MyISAM (and Aria?) Find out total tables of your database additional use of the table takes only one file descriptor for Consult your twice if two threads access the same table or if a thread 以下、CentOS6.6の環境で確認。 and this content is not reviewed in advance by MariaDB. Each Try to find a value that sees a slow, or possibly even no, increase in the number of opened tables. At this stage you are almost sure table_open_cache system variable is not tuned properly.   When the cache is in a temporarily Before that, the default was 400. (By contrast, the index This improves performance, although it comes at a cost of extra memory usage. if ( notice ) See N is the maximum number of tables 1568 0 188314 set the open_files_limit extended as necessary. この変数は直接設定することも、SET TRANSACTION ステートメントなどを使用して間接的に設定することもできます。セクション13.3.6「SET TRANSACTION 構文」を参照してください。スペースを含む分離レベル名に tx_isolation を直接設定する場合、名前を引用符記号で囲み、スペースをダッシュで置き換えるようにします。例: この変数の値を設定するために、一意となる任意の有効な値のプリフィクスを使用できます。, デフォルトのトランザクション分離レベルは --transaction-isolation サーバーオプションを使用すると、起動時にも設定できます。, デフォルトのトランザクションアクセスモード。値は OFF (読み取り/書き込み、デフォルト) または ON (読み取り専用) を指定できます。, この変数は直接設定することも、SET TRANSACTION ステートメントなどを使用して間接的に設定することもできます。セクション13.3.6「SET TRANSACTION 構文」を参照してください。, デフォルトのトランザクションアクセスモードを起動時に設定するには、--transaction-read-only サーバーオプションを使用します。, 1 に設定した場合 (デフォルト)、InnoDB テーブルのセカンダリインデックスの一意性チェックが行われます。0 に設定した場合、ストレージエンジンでは、重複したキーが入力データに存在しないことが想定されます。一意性違反がデータにないことが確実にわかっている場合、これを 0 に設定して InnoDB への大きいテーブルのインポートを高速化できます。, この変数を 0 に設定しても、ストレージエンジンが重複キーを無視する必要があるわけではありません。エンジンは引き続き、重複キーの存在を検査し、検出された場合に重複キーエラーが生成されます。, この変数は、基礎テーブルで定義した主キーのすべてのカラムがビューに含まれていない場合に、更新ステートメントに LIMIT 句が含まれているとき、そのビューの更新を行えるかどうかを制御します。(このような更新は GUI ツールによって頻繁に生成されます。)更新は UPDATE または DELETE ステートメントのことです。ここでの主キーとは PRIMARY KEY か、カラムに NULL を含むことができない UNIQUE インデックスです。, 1 または YES: 警告のみ発行します (エラーメッセージではない)。これはデフォルト値です。, validate_password プラグインは、validate_password_xxx 形式の名前を持つシステム変数のセットを実装します。これらの変数は、そのプラグインによるパスワードテストの影響を受けます。セクション6.1.2.6.2「パスワード検証プラグインのオプションおよび変数」を参照してください。, この変数が有効な場合 (デフォルト)、サーバーは各ユーザーアカウントを検査し、アカウントが使用できなくなる条件が検出された場合に警告を生成します。, アカウントは sha256_password 認証プラグインを必要としているが、このプラグインによって必要とされる SSL および RSA をいずれも有効化しないでサーバーが開始された。, validate_user_plugins を有効にすると、サーバー初期化および FLUSH PRIVILEGES の速度が低下します。追加の検査が必要ない場合、この変数を起動時に無効化するとパフォーマンス低下を防ぐことができます。, サーバーのバージョン番号。値には、サーバーの構築情報または構成情報を示すサフィクスを含めることも可能です。-log は、 1 つ以上の一般ログ、スロークエリーログ、またはバイナリログを有効化できることを示します。-debug は、デバッグサポートを有効にしてサーバーが構築されたことを示します。, CMake 構成プログラムには、MySQL の構築時にコメントの指定を可能にする COMPILATION_COMMENT オプションがあります。この変数は、そのコメントの値を格納します。セクション2.9.4「MySQL ソース構成オプション」を参照してください。, 非インタラクティブな接続を閉じる前に、サーバーがその接続上でアクティビティーを待機する秒数。, スレッド開始時に、セッションの wait_timeout 値は、wait_timeout グローバル値または interactive_timeout グローバル値で初期化されますが、いずれになるかはクライアントのタイプ (mysql_real_connect() に対する CLIENT_INTERACTIVE 接続オプションによって定義される) によって決まります。interactive_timeoutも参照してください。, メッセージを生成した最後のステートメントから得られたエラー、警告、および注意の数。この変数は読み取り専用です。セクション13.7.5.41「SHOW WARNINGS 構文」を参照してください。, The world's most popular open source database, Download table_open_cache entries.  +    INTO OUTFILE ステートメントの効果を制限し、そのディレクトリ内のファイルにのみ機能します。, マスターおよびスレーブそれぞれに一意の識別子を付与するレプリケーションで使用されるサーバー ID。この変数は、--server-id オプションによって設定されます。レプリケーションに参加する各サーバーは、そのサーバーの ID となる 1 から 232 − 1 の範囲の正の整数を、選択します。, sha256_password 認証プラグイン用の RSA 秘密鍵ファイルのパス名。ファイル名が相対パスとして指定された場合、サーバーのデータディレクトリを基準として解釈されます。ファイルは PEM 形式である必要があります。このファイルは秘密鍵を格納しているため、MySQL Server のみがファイルを読み取りできるようにファイルのアクセスモードを制限します。, RSA 鍵ファイルの作成の説明を含む sha256_password についての情報は、セクション6.3.8.4「SHA-256 認証プラグイン」を参照してください。, この変数は、MySQL が OpenSSL を使用して構築されている場合のみ利用できます。これは MySQL 5.6.6 で追加されました。(MySQL Community Edition は yaSSL を使用して構築されています。), sha256_password 認証プラグイン用の RSA 公開鍵ファイルのパス名。ファイル名が相対パスとして指定された場合、サーバーのデータディレクトリを基準として解釈されます。ファイルは PEM 形式である必要があります。このファイルは公開鍵を格納しているため、クライアントユーザーに対してコピーを自由に配布できます。(RSA パスワード暗号化を使用してサーバーに接続するときに公開鍵を明示的に指定するクライアントは、サーバーで使用されるものと同じ公開鍵を使用する必要があります。), RSA 鍵ファイルの作成と、クライアントが RSA 公開鍵を指定する方法についての説明を含む、sha256_password についての情報は、セクション6.3.8.4「SHA-256 認証プラグイン」を参照してください。, (Windows のみ。)共有メモリー接続に使用する共有メモリーの名前。これは、単一の物理マシン上で複数の MySQL インスタンスを実行する場合に便利です。デフォルト名は MYSQL です。名前は大文字と小文字を区別します。, これは、mysqld が外部ロック (システムロック) を使用する場合は OFF で、外部ロックが無効な場合は ON です。これは、MyISAM テーブルアクセスにのみ影響します。, この変数は、--external-locking または --skip-external-locking オプションによって設定されます。MySQL 4.0 以降では、外部ロックはデフォルトで無効化されています。, 外部ロックは MyISAM テーブルアクセスにのみ影響します。使用できるまたはできない状況も含めた詳細情報については、セクション8.10.5「外部ロック」を参照してください。, この変数は、--skip-name-resolve オプションの値から設定されます。これが OFF の場合、mysqld はクライアント接続を検査するときにホスト名を解決します。これが ON の場合、mysqld は IP 番号のみを使用し、この状況では、付与テーブル内のすべての Host カラム値が IP アドレスまたは localhost である必要があります。セクション8.11.5.2「DNS ルックアップの最適化とホストキャッシュ」を参照してください。, サーバーがローカル接続 (TCP/IP 以外) のみ許可する場合、これは ON です。Unix の場合、ローカル接続には Unix ソケットファイルが使用されます。Windows の場合、ローカル接続には名前付きパイプまたは共有メモリーが使用されます。この変数は、--skip-networking オプションを使用して ON に設定できます。, これは、SHOW DATABASES 権限を持っていないユーザーが SHOW DATABASES ステートメントを使用することを防ぎます。ほかのユーザーに属するデータベースをユーザーが表示できることに不安がある場合に、セキュリティーを高めることができます。この効果は SHOW DATABASES 権限によって異なります。変数の値が ON の場合、SHOW DATABASES ステートメントは SHOW DATABASES 権限を持つユーザーにのみ許可され、ステートメントはすべてのデータベース名を表示します。値が OFF の場合、SHOW DATABASES はすべてのユーザーに許可されますが、ユーザーが SHOW DATABASES またはほかの権限を持つデータベースの名前のみが表示されます。(すべてのグローバル権限がデータベースのための権限とみなされることに注意してください。), スレッドを作成する時間がこの秒数より長くかかると、サーバーは Slow_launch_threads ステータス変数を増やします。, スロークエリーログを有効にするかどうか。値が 0 (または OFF) の場合はログを無効にし、1 (または ON) の場合はログを有効にします。デフォルト値は、--slow_query_log オプションが指定されているかどうかによって異なります。ログ出力先は log_output システム変数によって制御され、この値を NONE にした場合はログが有効になっていてもログエントリは書き込まれません。, 「スロー」の程度は、long_query_time 変数の値によって決定されます。セクション5.2.5「スロークエリーログ」を参照してください。, スロークエリーログファイルの名前。デフォルト値は host_name-slow.log ですが、初期値は --slow_query_log_file オプションを使用すると変更できます。, Unix プラットフォームでは、この変数は、ローカルクライアント接続に使用されるソケットファイルの名前です。デフォルトは /tmp/mysql.sock です。(一部の配布形式ではディレクトリが異なる場合があり、たとえば RPM の場合は /var/lib/mysql です。), Windows では、この変数は、ローカルクライアント接続に使用される名前付きパイプの名前です。デフォルト値は MySQL です (大文字小文字の区別はありません)。, ソートを実行する必要がある各セッションは、このサイズのバッファーを割り当てます。sort_buffer_size はいずれかのストレージエンジンに固有ではなく、一般的な方法で最適化に適用されます。例については、セクション8.2.1.15「ORDER BY の最適化」を参照してください。, SHOW GLOBAL STATUS の出力に表示される秒あたりの Sort_merge_passes の数が多い場合、sort_buffer_size 値を増やすことで、クエリー最適化またはインデックスの改善によって改善できない ORDER BY または GROUP BY 操作を高速化することを検討できます。, MySQL 5.6.4 以降では、オプティマイザは必要なスペースを算出しようとしますが、さらに多く上限まで割り当てることができます。MySQL 5.6.4 より前では、オプティマイザはバッファーのすべてが必要ない場合でも、バッファー全体を割り当てます。いずれの場合も、これを必要以上に大きくグローバルに設定すると、ソートを実行するほとんどのクエリーが低速化します。これはセッション設定として増やし、かつ大きいサイズを必要とするセッションに制限することを推奨します。Linux の場合、256K バイトおよび 2M バイトのしきい値があり、それより大きい値にするとメモリー割り当てが著しく低速になるため、これらのいずれかの値より低くすることを検討してください。実験して、ワークロードに最適な値を見つけてください。セクションB.5.4.4「MySQL が一時ファイルを格納する場所」を参照してください。, 許可される sort_buffer_size の最大の設定値は 4G バイト − 1 です。64 ビットプラットフォームの場合は大きい値が許可されます (64 ビットの Windows の場合は例外で、大きい値は 4G バイト − 1 に切り捨てられて警告が出ます)。, この変数が 1 に設定されている場合は、自動的に生成された AUTO_INCREMENT 値を正常に挿入するステートメントの後に、次の形式のステートメントを発行すれば、その値を検索できます。, ステートメントが行を返す場合、返される値は LAST_INSERT_ID() 関数を呼び出した場合と同じです。複数行の挿入後の戻り値などについての詳細は、セクション12.14「情報関数」を参照してください。AUTO_INCREMENT 値を正常に挿入できなかった場合、SELECT ステートメントは行を返しません。, IS NULL 比較を使用して AUTO_INCREMENT 値を取得する動作は、Access などの一部の ODBC プログラムによって使用されます。Obtaining Auto-Increment Valuesを参照してください。この動作は sql_auto_is_null を 0 に設定することによって無効化できます。, MySQL 5.6 では sql_auto_is_null のデフォルト値は 0 です。, 0 に設定すると、MySQL は、実行に非常に時間がかかる SELECT ステートメント (つまり、調査される行数が max_join_size の値を超えるとオプティマイザが推定したステートメント) を中止します。これは、推奨されない WHERE ステートメントが発行されたときに便利です。新規接続についてのデフォルト値は 1 で、これはすべての SELECT ステートメントを許可します。, max_join_size システム変数を DEFAULT 以外の値に設定すると、sql_big_selects は 0 に設定されます。, 1 に設定すると、sql_buffer_result は SELECT ステートメントからの結果を一時テーブルに配置するよう強制します。これは、MySQL でテーブルロックを早期に解放するのに役立ち、クライアントに結果を送信するのに長い時間がかかる場合に適していることがあります。デフォルト値は 0 です。, この変数は、バイナリログへのロギングを実行するかどうかを制御します。デフォルト値は 1 (ロギングを実行する) です。現在のセッションのロギングを変更するには、この変数のセッション値を変更します。この変数を設定するには、セッションユーザーが SUPER 権限を持つ必要があります。, MySQL 5.6 では、トランザクションまたはサブクエリー内に @@SESSION.sql_log_bin を設定できません。(バグ #53437), この変数は、一般クエリーログへのロギングが実行されるかどうかを制御します。デフォルト値は 0 (ロギングを実行する) です。現在のセッションのロギングを変更するには、この変数のセッション値を変更します。このオプションを設定するには、セッションユーザーが SUPER 権限を持つ必要があります。デフォルト値は 0 です。, 現在のサーバー SQL モードで、動的に設定できます。MySQL 5.6.6 以降のデフォルトは NO_ENGINE_SUBSTITUTION で、以前は空の文字列でした。セクション5.1.7「サーバー SQL モード」を参照してください。, MySQL インストールプログラムはインストールプロセス中に SQL モードを構成することがあります。たとえば、mysql_install_db は、my.cnf という名前のデフォルトオプションファイルを基本インストールディレクトリに作成します。このファイルには、SQL モードを設定する行が含まれています。セクション4.4.3「mysql_install_db — MySQL データディレクトリの初期化」を参照してください。, SQL モードがデフォルトまたは期待されているモードと異なる場合、サーバーが起動時に読み取るオプションファイル内の設定を確認してください。, 1 (デフォルト) に設定した場合、Note レベルの警告によって warning_count が増加し、サーバーがこれらを記録します。0 に設定した場合、Note の警告によって warning_count は増加せず、サーバーはこれらを記録しません。mysqldump には、この変数を 0 に設定するための出力が含まれているため、ダンプファイルをリロードしても、リロード操作の整合性に影響しないイベントについて、警告が生成されません。, 1 (デフォルト) に設定すると、サーバーは SHOW CREATE TABLE と SHOW CREATE DATABASE ステートメントに識別子を引用します。0 に設定した場合、引用は無効化されます。このオプションはデフォルトで有効化されているため、引用が必要な識別子に対してレプリケーションが機能します。セクション13.7.5.12「SHOW CREATE TABLE 構文」およびセクション13.7.5.8「SHOW CREATE DATABASE 構文」を参照してください。, 1 に設定すると、MySQL は WHERE 句または LIMIT 句の内部でキーを使用しない UPDATE または DELETE ステートメントを中止します。(特に、UPDATE ステートメントは、キーを使用する WHERE 句または LIMIT 句、あるいはその両方を持つ必要があります。DELETE ステートメントは両方を持つ必要があります。)これにより、キーが正しく利用されないため多数の行を変更または削除する可能性がある UPDATE または DELETE ステートメントのキャッチが可能になります。デフォルト値は 0 です。, SELECT ステートメントから返される最大行数。新規接続についてのデフォルト値は、サーバーがテーブルあたりで許可する最大行数です。標準的なデフォルト値は (232)−1 または (264)−1 です。制限を変更した場合、デフォルト値は DEFAULT の値を割り当てることでリストアできます。, SELECT に LIMIT 句がある場合、LIMIT が sql_select_limit の値に優先されます。, この変数は、警告が発生する場合に、単一行の INSERT ステートメントが情報文字列を生成するかどうかを制御します。デフォルトは 0 です。この値を 1 に設定すると、情報文字列が生成されます。, PEM 形式での証明書失効リストを含むファイルへのパス。失効リストは、OpenSSL に対してコンパイルされた MySQL 配布で機能します (yaSSL では機能しません)。, PEM 形式での証明書失効リストを含むファイルを格納するディレクトリへのパス。失効リストは、OpenSSL に対してコンパイルされた MySQL 配布で機能します (yaSSL では機能しません)。, デフォルトストレージエンジン (テーブル型)。サーバー起動時にストレージエンジンを設定するには、--default-storage-engine オプションを使用します。セクション5.1.3「サーバーコマンドオプション」を参照してください。, この変数は非推奨です。代わりに default_storage_engine を使用してください。, 接続あたりでキャッシュされるストアドルーチンの数について、上側のソフトリミットを設定します。この変数の値は、ストアドプロシージャーおよびストアドファンクションで、MySQL Server によって維持される 2 つのキャッシュそれぞれに保持されるストアドルーチンの数に関して指定します。, ストアドルーチンが実行されると、ルーチン内の先頭または最上位レベルのステートメントが解析される前に、このキャッシュサイズが検査されます。同じタイプのルーチン (どちらが実行されているかによってストアドプロシージャーまたはストアドファンクション) の数が、この変数によって指定される制限を超える場合、対応するキャッシュがフラッシュされ、キャッシュされたオブジェクトに対して以前割り当てられていたメモリーが解放されます。これにより、ストアドルーチン間に依存関係がある場合でも、キャッシュを安全にフラッシュできます。, この変数が 1 に設定された場合、一時テーブル以外のテーブルが作成されると、その .frm ファイルは (fdatasync() を使用して) ディスクに同期されます。これは遅いですが、クラッシュした場合はより安全です。デフォルトは 1 です。, サーバーシステムタイムゾーン。サーバーは実行を開始するとき、マシンのデフォルトからタイムゾーン設定を継承し、サーバーを実行するために使用されるアカウントの環境または起動スクリプトによって変更されることがあります。値は system_time_zone を設定するために使用されます。通常、タイムゾーンは TZ 環境変数で指定されます。または mysqld_safe スクリプトの --timezone オプションを使用しても指定できます。, system_time_zone 変数は time_zone と異なります。これらは同じ値になることもありますが、後者の変数は、接続する各クライアントのタイムゾーンを初期化するために使用されます。セクション10.6「MySQL Server でのタイムゾーンのサポート」を参照してください。, 定義キャッシュに格納可能な (.frm ファイルからの) テーブル定義の数。多数のテーブルを使用する場合、大きいテーブル定義キャッシュを作成して、テーブルを開くことを高速化できます。標準のテーブルキャッシュと異なり、テーブル定義キャッシュは占有スペースが少なくファイルディスクリプタを使用しません。最小値は 400 です。デフォルト値は次の式に基づき、2000 までに制限されています。, InnoDB の場合、table_definition_cache は、InnoDB データディクショナリキャッシュ内の開いているテーブルインスタンスの数のソフト制限として機能します。開いているテーブルインスタンスの数が table_definition_cache 設定を超えた場合、LRU メカニズムはエビクション用のテーブルインスタンスにマークを付け、最終的にデータディクショナリキャッシュから削除されます。この制限は、次回サーバー開始までに使用頻度が低いテーブルインスタンスをキャッシュするために大量のメモリーが使用されるような状況に対処するのに役立ちます。キャッシュされたメタデータを持つテーブルインスタンスの数が、table_definition_cache によって定義された制限よりも多い場合があります。これは、InnoDB システムテーブルインスタンスと、外部キー関係を持つ親および子のテーブルインスタンスが LRU リストに配置されず、メモリーからエビクションされないためです。, さらに、table_definition_cache は、一度に開くことができる、InnoDB file-per-table テーブルスペースの数のソフト制限を定義し、これは innodb_open_files によっても制御されます。table_definition_cache および innodb_open_files の両方が設定される場合、高い方の設定値が使用されます。どちらの変数も設定されない場合、デフォルト値が高い table_definition_cache が使用されます。オープンテーブルスペースファイルハンドルの数が、table_definition_cache または innodb_open_files によって定義された制限を超える場合、LRU メカニズムは、テーブルスペースファイル LRU リストを検索して、完全にフラッシュされて現在延長されていないファイルを探します。この処理は、新しいテーブルスペースが開くたびに実行されます。「非アクティブな」テーブルスペースがない場合、テーブルスペースファイルはクローズされません。, すべてのスレッドについて開いているテーブルの数。この値を大きくすると、mysqld が要求するファイルディスクリプタの数が増加します。Opened_tables ステータス変数を検査して、テーブルキャッシュを増やす必要があるかどうかを確認できます。セクション5.1.6「サーバーステータス変数」を参照してください。Opened_tables の値が大きく、FLUSH TABLES をあまり使用しない場合 (すべてのテーブルのクローズおよび再オープンの強制のみを実行する)、table_open_cache 変数の値を増やします。テーブルキャッシュに関する詳細は、セクション8.4.3.1「MySQL でのテーブルのオープンとクローズの方法」を参照してください。, 開いているテーブルキャッシュインスタンスの数 (デフォルトは 1)。セッション間の競合を減少させることでスケーラビリティーを改善するために、開いているテーブルキャッシュを、サイズが table_open_cache / table_open_cache_instances のいくつかの小さいキャッシュインスタンスにパーティション化できます。DML ステートメントでは、セッションはインスタンスにアクセスするために、1 つのインスタンスのみロックする必要があります。このセグメントキャッシュは複数インスタンスにわたってアクセスし、多くのセッションがテーブルにアクセスする場合にキャッシュを使用する演算の高いパフォーマンスが可能になります。(DDL ステートメントでは引き続きキャッシュ全体のロックが必要ですが、そのようなステートメントは DML ステートメントよりも頻度がずっと低くなります。), 通常 16 以上のコアを使用するシステムでは、8 または 16 の値が推奨されます。, サーバーが再使用のためにキャッシュするスレッドの数。クライアントが接続を切断したとき、スレッド数が thread_cache_size より少なければ、クライアントのスレッドはキャッシュに配置されます。スレッドのリクエストは、可能であれば、キャッシュからのスレッドを再使用することによって満たされ、キャッシュが空の場合のみ新しいスレッドが作成されます。多くの新しい接続がある場合、この変数を増やしてパフォーマンスを向上できます。スレッドの実装が適切な場合、通常はパフォーマンスが著しく改善されることはありません。ただし、1 秒あたり数百件の接続がサーバーで見られる場合、通常は thread_cache_size を十分に高く設定すると、ほとんどの新しい接続でキャッシュされたスレッドを使用できます。ステータス変数 Connections と Threads_created の差異を調査することで、スレッドキャッシュの効率性を確認できます。詳細については、セクション5.1.6「サーバーステータス変数」を参照してください。, この変数は Solaris 8 以前のシステムに固有のもので、mysqld はこのシステムに対し、変数値を指定して thr_setconcurrency() 関数を呼び出します。この関数によって、アプリケーションは、同時に実行するのが望ましいスレッド数についてのヒントをスレッドシステムに指示できます。現在の Solaris バージョンのドキュメントには、これは効果がないと記載されています。, この変数は MySQL 5.6.1 以降で非推奨となり、MySQL 5.7 で削除されています。これを見つけたときは、Solaris 8 以前のためのものでないかぎり、MySQL 構成ファイルから削除してください。, 接続スレッドのサーバーによって使用されるスレッド処理モデル。許可される値は no-threads (サーバーは 1 つの接続を処理するために単一スレッドを使用する) および one-thread-per-connection (サーバーはそれぞれのクライアント接続を処理するために 1 つのスレッドを使用する) です。Linux でのデバッグには no-threads が便利です。セクション24.4「MySQL のデバッグおよび移植」を参照してください。, スレッドプールプラグインが有効な場合、サーバーは thread_handling 値を dynamically-loaded に設定します。セクション8.11.6.1「スレッドプールコンポーネントとインストール」を参照してください。, 値 0 (デフォルト) では、並列性の低い保守的なアルゴリズムが使用されます。これはもっとも良く検査されていて、非常に良好な結果を生成することが知られています。, 値 1 では並列性が高まり、より積極的なアルゴリズムが使用されます。このアルゴリズムは、最適なスレッドカウントでパフォーマンスが 5 – 10% 高まりますが、接続数が増えるにつれてパフォーマンスが低下することが知られています。この使用は実験的であり、サポートされないものとみなすようにしてください。, この変数は MySQL 5.6.10 で追加されました。これはスレッドプールプラグインが有効な場合のみ使用できます。セクション8.11.6「スレッドプールプラグイン」を参照してください, この変数は、実行前の新規ステートメントのキューイングに影響します。値が 0 (false、デフォルト) の場合、ステートメントのキューイングでは優先度の低いキューと優先度の高いキューの両方が使用されます。値が 1 (true) の場合、キューに入れられるステートメントは常に優先度の高いキューに入ります。, スレッドプール内で許可される最大の未使用スレッド数。この変数により、スリープ状態のスレッドによって使用されるメモリーの量を制限できます。, 値 0 (デフォルト) は、スリープ状態のスレッドの数を制限しないことを意味します。値 N は、N が 0 より大きい場合、1 つのコンシューマスレッドと、N−1 個の予約スレッドを意味します。この状況で、スレッドがスリープ状態に入ろうとしたが、スリープ状態のスレッド数がすでに最大値に到達している場合、スレッドはスリープ状態に入らずに存在します。, スリープ状態のスレッドは、コンシューマスレッドまたは予約スレッドのいずれかとしてスリープ状態になります。スレッドプールでは、1 つのスレッドがスリープ状態のコンシューマスレッドであることを許可します。あるスレッドがスリープ状態になり、コンシューマスレッドが存在しない場合、そのスレッドはコンシューマスレッドとしてスリープ状態になります。スレッドをウェイクアップさせる必要があるとき、コンシューマスレッドが存在すれば、そのコンシューマスレッドが選択されます。ウェイクアップするコンシューマスレッドがない場合にのみ予約スレッドが選択されます。, この変数は、優先度が低いキューで実行を待機するステートメントに影響します。この値は、待機中のステートメントが優先度の高いキューに移されるまでのミリ秒数です。デフォルトは 1000 (1 秒) です。値の範囲は 0 から 232 − 2 です。, スレッドプール内のスレッドグループの数。これはスレッドプールのパフォーマンスを制御するもっとも重要なパラメータです。同時に実行できるステートメントの数に影響します。デフォルト値は 16 で、許可される値の範囲は 1 から 64 です。この範囲の外側の値が指定された場合、スレッドプールプラグインはロードされず、サーバーはエラーログにメッセージを書き込みます。, この変数はステートメントの実行に影響します。この値は、ステートメントが実行を開始したあと、ステートメントが停滞していると定義される前に終了する時間量で、その時点で、スレッドプールはスレッドグループは別のステートメントの実行の開始を許可します。この値は 10 ミリ秒単位で測定されるため、値 6 (デフォルト) は 60 ミリ秒を意味します。値の範囲は 4 から 600 (40 ミリ秒から 6 秒) です。待機の値が短いと、スレッドはよりすみやかに開始できます。短い値はデッドロック状況を回避により適しています。長い待機の値は、長時間実行するステートメントを含むワークロードで有用で、現在のステートメントの実行時に多数の新しいステートメントが開始しないようにします。, 各スレッドのスタックサイズ。crash-me テストによって検出される制限の多くは、この値に依存します。セクション8.12.2「MySQL ベンチマークスイート」を参照してください。デフォルトの 192K バイト (64 ビットシステムの場合は 256K バイト) は、通常の操作では十分な大きさです。スレッドスタックサイズが小さすぎると、サーバーで処理できる SQL ステートメントの複雑さ、ストアドプロシージャーの再帰の深さなど、メモリーを大量に消費する処理が制限されます。, 現在のタイムゾーン。この変数は、接続する各クライアントのタイムゾーンを初期化するために使用されます。デフォルトでは、この初期値は 'SYSTEM' です (「system_time_zone の値を使用する」ことを意味します)。この値はサーバー起動時に --default-time-zone オプションで明示的に指定できます。セクション10.6「MySQL Server でのタイムゾーンのサポート」を参照してください。, MySQL 5.6 で、この変数は非推奨になり、必要ありません。これは今後の MySQL リリースで削除されます。, このクライアントの時間を設定します。これはバイナリログを使用して行をリストアする場合に元のタイムスタンプを取得するために使用されます。timestamp_value は Unix エポックタイムスタンプ (UNIX_TIMESTAMP() で返されるような値で、'YYYY-MM-DD hh:mm:ss' 形式の値ではありません) または DEFAULT になります。, timestamp を定数値に設定すると、ふたたび変更されるまでその値が保持されます。timestamp を DEFAULT に設定すると、その値はアクセスを受けた時点での現在の日付および時間になります。, MySQL 5.6.4 以降では、timestamp は BIGINT でなく DOUBLE で、これはこの値がマイクロ秒部分を含むためです。, SET timestamp は NOW() によって戻された値に影響を及ぼしますが、SYSDATE() によって戻された値には影響しません。つまり、バイナリログのタイムスタンプ設定は、SYSDATE() の呼び出しに影響しないことを意味します。サーバーを --sysdate-is-now オプションで開始して、SYSDATE() を NOW() のエイリアスにでき、この場合 SET timestamp が両方の関数に影響します。, 内部インメモリーの一時テーブルの最大サイズ。(実際の制限値は tmp_table_size と max_heap_table_size の最小値として決定されます。)インメモリーの一時テーブルが制限値を超えると、MySQL はこれを自動的にディスク上の MyISAM テーブルにします。多数の高度な GROUP BY クエリーを実行する場合にメモリーが多くあるときは、tmp_table_size (さらに必要に応じて max_heap_table_size) の値を増やします。この変数はユーザーが作成した MEMORY テーブルには適用されません。, Created_tmp_disk_tables 変数と Created_tmp_tables 変数の値を比較することによって、作成された内部のディスク上の一時テーブル数と、作成された内部の一時テーブルの総数を比較できます。, セクション8.4.4「MySQL が内部一時テーブルを使用する仕組み」も参照してください。, 一時ファイルおよび一時テーブル用に使用されるディレクトリ。この変数は、ラウンドロビン方式で使用されるいくつかのパスのリストとして設定できます。パスは UNIX ではコロン文字 (「:」)、Windows ではセミコロン文字 (「;」) で区切るようにしてください。, 複数ディレクトリ機能を使用すると、いくつかの物理ディスクに負荷を分散できます。MySQL Server がレプリケーションスレーブとして動作する場合、tmpdir を、メモリーベースのファイルシステム上のディレクトリや、サーバーホストが再起動したときにクリアされるディレクトリに指定するように設定しないでください。レプリケーションスレーブは、一部の一時ファイルがマシンの再起動後も存続し、一時テーブルまたは LOAD DATA INFILE 操作を複製できるようにする必要があります。サーバーが再起動したときに一時ファイルディレクトリ内のファイルが消失した場合、レプリケーションは失敗します。slave_load_tmpdir 変数を使用すると、スレーブの一時ディレクトリを設定できます。その場合、スレーブは一般的な tmpdir 値を使用せず、tmpdir を非永続的な場所に設定できます。, メモリーを必要とするトランザクションごとのメモリープールを増やす、バイト単位の増加量。transaction_prealloc_size の説明を参照してください。, トランザクションに関するさまざまな割り当てでメモリーの取得元となる、トランザクションごとのメモリープールが存在します。プールのバイト単位の初期サイズは transaction_prealloc_size です。利用できるメモリーが不足しているためプールから十分に行えない各割り当てについて、プールは transaction_alloc_block_size バイトだけ増加されます。トランザクションが終了すると、プールは transaction_prealloc_size バイトに切り捨てられます。, 単一トランザクション内のすべてのステートメントを含めるように transaction_prealloc_size を十分に大きくすると、多数の malloc() コールを避けることができます。, デフォルトのトランザクション分離レベル。デフォルト値は REPEATABLE-READ。.