sql >> データベース >  >> RDS >> Mysql

MySQLでクエリキャッシュをオフにする必要がありますか?

    ほとんどすべての本番サーバーでは、クエリキャッシュをオフにすることをお勧めします。 すべて テーブルを変更すると、すべてが削除されます そのテーブルのQCエントリ。テーブルが大きいほど、時間がかかります。 128Mは危険なほど高いです。

    通常、innodb_buffer_pool_sizeを設定するのが賢明です。 利用可能の約70%まで 羊。データセットのサイズよりもはるかに小さい値に設定しています。 3Gがおそらく役立つでしょう。 20Gはこれ以上役に立ちません(データセットが大幅に大きくなるまで)。

    OSとMySQLの両方が64ビットバージョンであることを確認してください。

    より徹底的な分析のために、提供してください

    • RAMサイズ(32G)
    • SHOW VARIABLES;
    • SHOW GLOBAL STATUS; (少なくとも24時間実行した後)

    分析 変数とステータスの一覧:

    より重要な問題

    InnoDBと2GBのデータのみを使用している(?)ので、innodb_buffer_pool_sizeに関するコメントに応答することは重要ではありません。 およびkey_buffer_size

    DELETEの多用に関する詳細を入力してください 。

    スローログを利用して、「最悪の」クエリを見つけます。詳細こちら 。これにより、以下で説明するtmp_tableとテーブルスキャンの問題が特定されます。

    OPTIMIZE TABLEをわざわざ使用しないでください 。

    「取引」はどのように行っていますか?自動コミットを使用する場合もあれば、COMMITを使用する場合もあります ?

    詳細とその他の所見

    ( Key_blocks_used * 1024 / key_buffer_size ) = 4,710 * 1024 / 128M = 3.6% --使用されたkey_bufferのパーセント。最高水準点。-key_buffer_sizeを下げて、不要なメモリ使用を回避します。

    ( innodb_buffer_pool_size / _ram ) = 4096M / 32768M = 12.5% --InnoDB buffer_poolに使用されるRAMの%

    ( (key_buffer_size / 0.20 + innodb_buffer_pool_size / 0.70) / _ram ) = (128M / 0.20 + 4096M / 0.70) / 32768M = 19.8% --利用可能なRAMのほとんどは、キャッシュに利用できるようにする必要があります。-- http://mysql。 rjweb.org/doc.php/memory

    ( Innodb_buffer_pool_pages_free * 16384 / innodb_buffer_pool_size ) = 187,813 * 16384 / 4096M = 71.6% --バッファプールが空いています--buffer_pool_sizeがワーキングセットよりも大きいです。それを減らすことができます

    ( Innodb_pages_written / Innodb_buffer_pool_write_requests ) = 7,144,121 / 29935426 = 23.9% -ディスクにヒットする必要のあるリクエストを書き込みます--innodb_buffer_pool_sizeを確認します

    ( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 1,199,046,656 / 4096M = 27.9% -データが占めるバッファプールの割合-わずかな割合 buffer_poolが不必要に大きいことを示します。

    ( Uptime / 60 * innodb_log_file_size / Innodb_os_log_written ) = 533,153 / 60 * 512M / 20356473344 = 234 --InnoDBログローテーション間の分5.6.8以降、これは動的に変更できます。 my.cnfも必ず変更してください。--(ローテーション間の60分の推奨は多少任意です。)innodb_log_file_sizeを調整します。 (AWSでは変更できません。)

    ( Innodb_rows_deleted / Innodb_rows_inserted ) = 364,605 / 414950 = 0.879 -チャーン-「キューに入れるのではなく、ただやってください。」 (MySQLがキューとして使用されている場合。)

    ( Created_tmp_disk_tables / (Created_tmp_disk_tables + Created_tmp_tables) ) = 247,373 / (247373 + 446152) = 35.7% --ディスクにこぼれた一時テーブルの割合--tmp_table_sizeとmax_heap_table_sizeを増やす可能性があります。ブロブなどを避けてください。

    ( Select_scan ) = 871,872 / 533153 = 1.6 /sec -全表スキャン-インデックスの追加/クエリの最適化(小さなテーブルでない限り)

    ( Select_scan / Com_select ) = 871,872 / 12593904 = 6.9% -全表スキャンを実行している選択の%。 (保存されたルーチンにだまされる可能性があります。)-インデックスの追加/クエリの最適化

    ( Com_optimize ) = 216 / 533153 = 1.5 /HR --OPTIMIZETABLEが実行される頻度。--OPTIMIZETABLEが役立つことはめったになく、確かに高頻度ではありません。

    ( long_query_time ) = 10.000000 = 10 -「遅い」クエリを定義するためのカットオフ(秒)。-提案2

    極端(コメントなし):

    異常に小さい:

    Com_commit = 2.5 /HR
    Innodb_buffer_pool_pages_made_not_young = 0.15 /sec
    Innodb_ibuf_merged_delete_marks = 27 /HR
    Innodb_row_lock_time = 8
    Innodb_row_lock_time_max = 1
    interactive_timeout = 360
    

    異常に大きい:

    Com_rollback_to_savepoint = 14 /HR
    Handler_savepoint_rollback = 14 /HR
    join_cache_level = 8   (This may be unused?  It was removed in 5.6.3, but possibly left in MariaDB 10.1?)
    

    異常な文字列:

    Innodb_buffer_pool_dump_status = Dumping buffer pool(s) not yet started
    Innodb_buffer_pool_load_status = Loading buffer pool(s) not yet started
    innodb_checksum_algorithm = INNODB
    innodb_cleaner_lsn_age_factor = HIGH_CHECKPOINT
    innodb_empty_free_list_algorithm = BACKOFF
    innodb_force_load_corrupted = OFF
    innodb_foreground_preflush = EXPONENTIAL_BACKOFF
    innodb_log_checksum_algorithm = INNODB
    myisam_stats_method = NULLS_UNEQUAL
    opt_s__engine_condition_pushdown = off
    opt_s__mrr = off
    opt_s__mrr_cost_based = off
    

    クエリキャッシュ

    オフになっているため、Qcacheステータス値は設定されていません。そのため、元の質問に答えることはできません。 QCをオンにしてサーバーを再起動し、数日待つ場合は、QCをオンにして再分析できます。ヒット、プルーンなどに関するさまざまな指標 元の質問に対処します。



    1. SQLiteで先行ゼロを使用して数値をフォーマットする方法

    2. MySqlを使用して、列を並べ替えることはできますが、最後に0を指定できますか?

    3. MySQLで月の2つの日付の差を計算する方法

    4. SSMS2016エラーAzureSQLv12 bacpacのインポート:パスワードなしのマスターキーはサポートされていません