GreatSQL 統計情報関連のナレッジポイント

関連する知識ポイント:

INNODB_STATS_PERSIST=ONまたは、STATS_PERSIST=1単一のテーブルを定義する場合、オプティマイザー統計はディスクに保存されます。デフォルトでは、innodb_stats_persistent有効になっています。

mysql.innodb_table_stats永続的な統計はとのテーブルに保存されますmysql.innodb_index_stats

デフォルトで有効になっている変数はinnodb_stats_auto_recalc、テーブル内の行の 10% 以上が変更されたときに統計を自動的に計算するかどうかを制御します。STATS_AUTO_RECALC自動統計再計算は、テーブルの作成または変更時に句を指定することによって、個々のテーブルに対して構成できます。

バックグラウンドで行われる自動統計再計算の非同期の性質により、有効になっている場合でもinnodb_stats_auto_recalc、テーブルの 10% 以上に影響を与える DML 操作の実行直後には統計が再計算されません。場合によっては、統計の再計算が数秒遅れることがあります。最新の統計がすぐに必要な場合は、ANALYZE TABLE を実行して統計の同期 (フォアグラウンド) 再計算を開始します。

無効にするとinnodb_stats_auto_recalc、インデックス列に多数の変更を加えた後に ANALYZE TABLE ステートメントを実行することで、オプティマイザ統計の精度を確保できます。

INNODB_STATS_PERSIST=OFFを使用して単一のテーブルを作成または変更する場合、STATS_PERSIST=0オプティマイザ統計はディスクに保存されません。代わりに、統計はメモリに保存され、サーバーがシャットダウンされると失われます。統計は、特定のアクションおよび特定の条件下で定期的に更新されます。

インデックスが既存のテーブルに追加される場合、または列が追加または削除される場合、の値に関係なく、innodb_stats_auto_recalcインデックス統計が計算され、テーブルに追加されます。innodb_index_stats

統計に影響を与える 5 つのパラメータ

  • innodb_stats_persistent: InnoDB インデックス統計をディスクに保存するかどうかを指定します。デフォルトで有効になります。

  • innodb_stats_persistent_sample_pages: インデックス列のカーディナリティやその他の統計 (分析テーブルによって計算される統計など) を推定するときにサンプリングするインデックス ページの数。この値を増やすとインデックス統計の精度が向上しますが、innodb_stats_persistent_sample_pagesより高い値を設定すると、分析テーブルの実行に時間がかかる可能性があります。

  • innodb_stats_auto_recalc: テーブル内のデータに大幅な変更が加えられた後、InnoDB が永続的な統計を自動的に再計算します。しきい値はテーブル内の行数の 10% で、デフォルトでオンになっています。

  • innodb_stats_include_delete_marked: 永続的なオプティマイザー統計を計算するときに、削除対象としてマークされたレコードが InnoDB に含まれるかどうか (デフォルトではオフ)。

  • innodb_stats_transient_sample_pages: インデックス列のカーディナリティやその他の統計 (分析テーブルによって計算される統計など) を推定するときにサンプリングするインデックス ページの数。デフォルト値は 8 です。この値を増やすとインデックス統計の精度が向上し、クエリ実行プランが改善されますが、その代償として InnoDB テーブルを開いたり統計を再計算したりする際の I/O が増加します。このパラメータはテーブルに対して無効な場合にのみ適用されinnodb_stats_persistent、有効な場合は代わりにINNODB_STATS_PERSIST適用されます。INNODB_STATS_PERSIST_SAMPLE_PAGESinnodb_stats_sample_pages

要約:

1. 非永続的な統計情報は、次の状況で自動的に更新されます。

  1. ANALYZE TABLEの実行
  2. innodb_stats_on_metadata=ONこの場合、SHOW TABLE STATUS、SHOW INDEX を実行し、INFORMATION_SCHEMA の下の TABLES と STATISTICS をクエリします。
  3. --auto-rehash 機能を有効にして、mysql クライアントを使用してログインします。
  4. 初めてテーブルが開かれます
  5. 前回の統計情報の更新以降、表 1/16 のデータが変更されました。

非永続統計の欠点は明らかであり、データベースの再起動後に多数のテーブルが統計の更新を開始すると、インスタンスに大きな影響を与えるため、現在は永続統計が使用されています。

2. 永続性統計は、次の状況で自動的に更新されます。

  1. INNODB_STATS_AUTO_RECALC=ONこの場合、テーブル内のデータの 10% が変更されます。

  2. 新しいインデックスを追加する

3. 不正確な統計情報の取扱いについて

実行プランを確認したところ、innodb_index_stats の統計情報の大きな差異が原因であった場合は、次の方法で対処できます。

  1. 統計情報を手動で更新します。実行中に読み取りロックが追加されることに注意してください。

分析可能なテーブル名;

  1. 更新後も統計情報が不正確な場合は、テーブル サンプリング用のデータ ページを追加することを検討できます。統計情報を変更するには、次の 2 つの方法があります。

a.INNODB_STATS_PERSISTENT_SAMPLE_PAGESグローバル変数のデフォルト値は 20 です。

b. 単一のテーブルでテーブルのサンプリングを指定できます。

ALTER TABLE TABLE_NAME STATS_SAMPLE_PAGES=40;

テスト後のSTATS_SAMPLE_PAGES最大値は 65535 です。それを超えるとエラーが報告されます。

c. テーブル統計を手動で更新しinnodb_table_stats(innodb_index_statsこれら 2 つのテーブルを変更しても binlog は生成されません)、FLUSH TABLE tbl_nameステートメントを使用して更新された統計をロードします。


GreatSQL をお楽しみください :)

GreatSQL について

GreatSQL は、金融レベルのアプリケーションに適した国産の独立したオープンソース データベースであり、高パフォーマンス、高信頼性、高使いやすさ、高セキュリティなどの多くのコア機能を備えており、MySQL または Percona Server のオプションの代替として使用できます。オンラインの実稼働環境で使用され、完全に無料で、MySQL または Percona Server と互換性があります。

関連リンク: GreatSQL コミュニティ Gitee GitHub Bilibili

GreatSQL コミュニティ:

画像

コミュニティの報酬に関する提案とフィードバック: https://greatsql.cn/thread-54-1-1.html

コミュニティ ブログ賞を受賞した投稿の詳細: https://greatsql.cn/thread-100-1-1.html

(記事について質問がある場合、または独自の洞察がある場合は、公式コミュニティ Web サイトにアクセスして質問したり共有したりできます~)

技術交流グループ:

WeChat & QQ グループ:

QQグループ: 533341697

WeChat グループ: GreatSQL コミュニティ アシスタント (WeChat ID: wanlidbc) を友達として追加し、コミュニティ アシスタントがあなたをグループに追加するまで待ちます。

ライナスは、カーネル開発者がタブをスペースに置き換えることを阻止するために自ら問題を解決しました。 彼の父親はコードを書くことができる数少ないリーダーの 1 人であり、次男はオープンソース テクノロジー部門のディレクターであり、末息子は中核です。ファー ウェイ: 一般的に使用されている 5,000 のモバイル アプリケーションを変換するのに 1 年かかった Java はサードパーティの脆弱性が最も発生しやすい言語です。Hongmeng の父: オープンソースの Honmeng は唯一のアーキテクチャ上の革新です。中国の基本ソフトウェア分野で 馬化騰氏と周宏毅氏が握手「恨みを晴らす」 元マイクロソフト開発者:Windows 11のパフォーマンスは「ばかばかしいほど悪い」 老祥基がオープンソースであるのはコードではないが、その背後にある理由は Meta Llama 3 が正式にリリースされ、 大規模な組織再編が発表されました
{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/GreatSQL/blog/11054458