web-dev-qa-db-ja.com

table_definition_cacheには何を設定すればよいですか?

table_definition_cacheを発見しました。何に設定するかを決定しようとしています。パフォーマンスの問題のため、設定をいじっています。

1台のサーバーに36599テーブルがあり、SHOW GLOBAL STATUSを実行すると、Openedテーブルの値は930312です。table_definition_cacheは20kに設定されています。

別のサーバーでは45349個のテーブルがあり、SHOW GLOBAL STATUSを実行すると、Openedテーブルの値は94383になります。table_definition_cacheは40kに設定されます。

サーバーが多くのオープン/スワッピングを実行しているように見えるため、table_definition_cacheの値を何に設定するかわかりません。

どちらのサーバーもCentOS 6で稼働している

サーバーのバージョン:5.6.32-78.0 Percona Server(GPL)、リリース78.0、リビジョン8a8e016

見てくれてありがとう!フィードバックに感謝します。

4
ODelibalta

このリンクがあなたの微調整を決めるのに役立つことを願っています。少し後で私の答え、申し訳ありません。

この情報を使用して、5.5 MySQLバージョンのいくつかの問題を解決できました。

ここ:table_open_cacheの計算方法を確認できます

  1. open_tablesopened_tablesの現在の値を見つける

mysql> show global status like 'open%';

すべてのスレッドの開いているテーブルの数。この値を増やすと、mysqldが必要とするファイル記述子の数が増えます。 Opened_tablesステータス変数を確認することで、テーブルキャッシュを増やす必要があるかどうかを確認できます。 Opened_tablesの値が大きく、FLUSH TABLESを頻繁に使用しない場合(これにより、すべてのテーブルが強制的に閉じられて再度開かれる)、table_open_cache変数の値を増やす必要があります。

  1. テーブルキャッシュヒット率を調べる

Table cache hit rate = table_open_cache*100/Opened_tables

一般的には50%以上にする必要があります。したがって、Opened_tablesの値を高くする理由はたくさんありますが、この値を下回っている場合は、table_open_cacheの値を増やす必要があります。 FLUSH TABLESと同様に、開いているすべてのテーブルを閉じて再度開き、Opened_tablesの値を大幅に増やします。

  1. Table_open_cacheの調整値を計算して設定する

Table_open_cache = total_tables*Threads_connected

すべてのスレッド(ユーザー)が通常すべてのテーブルにアクセスするわけではないため。計算された値の50%を設定すべきだと思います。この変数の値が大きすぎると、他の副作用が発生するためです。だから式は

Table_open_cache = total_tables*Threads_connected*.50

  1. table_open_cacheとともに、open_files_limitシステム変数も調整する必要があります。

一般的にはtable_open_cacheの2倍です。

open_files_limit= Table_open_cache*2

open_files_limitは動的変数ではありません。したがって、my.cnfファイルに設定して、MySQLを再起動する必要があります。

オペレーティングシステムが、table_open_cache設定で必要なオープンファイル記述子の数に対応できることを確認してください。

参照 https://techinfobest.com/optimize-mysql-table_open_cache/

そして、MySQLドキュメントは、table_definition_cacheサイズに基づいてtable_open_cacheを設定する式を提供します。 (はい、わかっています。リンクは5.7バージョンですが、5.5ドキュメントバージョンでは式についての言及はありません)。したがって、最初にtable_open_cacheのサイズを定義する必要があります。これが私が与える理由です上記のリンク。

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_table_definition_cache

次に、COM_STMT_REPREPAREおよびOpen_table_definitionsのステータスを監視して、サーバーで何が起こっているかを確認する必要があります。 prepared statementsを使用していて、メッセージerror code [1615]Prepared statement needs to be re-preparedを取得しているアプリケーションがある場合は、MySQLがキャッシュされた定義テーブルをフラッシュしていることを示します。( https://dev.mysql.com/ doc/refman/5.5/en/error-messages-server.html#error_er_need_reprepare

最後に:MySQLがstmtを再準備する理由に関する情報

https://dev.mysql.com/doc/refman/5.5/en/statement-repreparation.html

6
Cepxio

Opened_tablesはUptimeなしでは役に立ちません。それらの商は何ですか? 1秒あたり2未満に保つことをお勧めします。

1
Rick James