Re Slowlog:my.cnfを見せてください。 [mysqld]
に変更がありましたか セクション? SELECT SLEEP(12);
でテストします 、次にファイルとテーブルの両方を調べます。
クエリを見つける別の方法:クエリには数分かかるため、SHOW FULL PROCESSLIST;
を実行します。 実行されている可能性があると思われる場合。
どのくらいのRAMがありますか? しない max_allowed_packet=300M
があります 少なくとも30GBのRAMがない限り。それ以外の場合は、スワッピング(またはクラッシュ)のリスクがあります。その設定をRAMの1%未満に保ちます。
調整可能ファイルの詳細な分析については、(1)RAMサイズ、(2)SHOW VARIABLES;
を提供してください。 (3)SHOW GLOBAL STATUS;
。
deleted_at
を再確認してください :あなたが与えたリンクは、「列deleted_atは適切なインデックス候補ではありません」で始まります。あなたはそれを誤解しました。単一列のINDEX(deleted_at)
について話している 。 INDEX(contact_id, job_class_name, execute_at, deleted_at)
などの複合インデックスを提案しています 。
小さなテーブルでの単純なクエリの場合は158秒ですか? その他がたくさんある可能性があります 進行中のもの。 PROCESSLIST
を取得します 。
インデックスとコンポジットを分離する:2つのインデックスを考えてください:INDEX(last_name)
およびINDEX(first_name)
。 last_nameインデックスをめくって「James」を見つけたら、何ができますか? 「リック」の他のインデックスをめくっても、私を見つけるのに役立ちません。
変数とグローバルステータスの分析
観察:
- バージョン:5.7.22ログ
- 1.00GBのRAM
- 稼働時間=16d10:30:19
- これがSHOWGLOBALSTATUSでしたか?
- Windowsで実行していません。
- 64ビットバージョンの実行
- 完全に(またはほとんど)InnoDBを実行しているようです。
より重要な問題:
innodb_buffer_pool_size-10Mではなく213Mであると思いました。 10Mは小さすぎます。一方、データはそれほど多くないようです。
RAMが非常に小さいため、tmp_table_size、max_heap_table_size、max_allowed_packetを8Mに下げ、table_open_cache、table_definition_cache、innodb_open_filesを500に下げることをお勧めします。
何がこれほど多くの同時接続を引き起こしますか?
詳細とその他の所見:
( innodb_buffer_pool_size / _ram ) = 10M / 1024M = 0.98%
--InnoDB buffer_poolに使用されるRAMの%
( innodb_buffer_pool_size ) = 10M
--InnoDBデータ+インデックスキャッシュ
( innodb_lru_scan_depth ) = 1,024
--「InnoDB:page_cleaner:1000msの意図したループがかかりました...」は、lru_scan_depthを下げることで修正される可能性があります
( Innodb_buffer_pool_pages_free / Innodb_buffer_pool_pages_total ) = 375 / 638 = 58.8%
--現在使用されていないbuffer_poolの割合--innodb_buffer_pool_sizeが必要以上に大きいですか?
( Innodb_buffer_pool_bytes_data / innodb_buffer_pool_size ) = 4M / 10M = 40.0%
-データが占めるバッファプールの割合-わずかな割合 buffer_poolが不必要に大きいことを示します。
( innodb_log_buffer_size / _ram ) = 16M / 1024M = 1.6%
--InnoDBログ書き込みのバッファリングに使用されるRAMの割合。--大きすぎると、RAMの他の用途が失われます。
( innodb_log_file_size * innodb_log_files_in_group / innodb_buffer_pool_size ) = 48M * 2 / 10M = 960.0%
--buffer_poolサイズに対するログサイズの比率。 50%が推奨されますが、それが重要かどうかについては他の計算を参照してください。-ログはバッファープールより大きくする必要はありません。
( innodb_flush_method ) = innodb_flush_method =
--InnoDBがOSにブロックの書き込みを要求する方法。二重バッファリングを回避するために、O_DIRECTまたはO_ALL_DIRECT(Percona)を提案します。 (少なくともUnixの場合。)O_ALL_DIRECTに関する警告については、chrischandlerを参照してください
( innodb_flush_neighbors ) = 1
-ブロックをディスクに書き込むときのマイナーな最適化。-SSDドライブには0を使用します。 HDDの場合は1。
( innodb_io_capacity ) = 200
--ディスク上で可能な1秒あたりのI/O操作。低速ドライブの場合は100。回転ドライブの場合は200。 SSDの場合は1000〜2000。 RAID係数を掛けます。
( innodb_print_all_deadlocks ) = innodb_print_all_deadlocks = OFF
-すべてのデッドロックをログに記録するかどうか。-デッドロックに悩まされている場合は、これをオンにします。注意:デッドロックが多い場合、ディスクに大量の書き込みが発生する可能性があります。
( min( tmp_table_size, max_heap_table_size ) / _ram ) = min( 16M, 16M ) / 1024M = 1.6%
--MEMORYテーブル(テーブルごと)またはSELECT内の一時テーブル(一部のSELECTごとの一時テーブルごと)が必要な場合に割り当てるRAMの割合。高すぎるとスワッピングにつながる可能性があります。-tmp_table_sizeとmax_heap_table_sizeを、たとえばRAMの1%に減らします。
( net_buffer_length / max_allowed_packet ) = 16,384 / 16M = 0.10%
( local_infile ) = local_infile = ON
--local_infile=ONは潜在的なセキュリティ問題です
( Select_scan / Com_select ) = 111,324 / 264144 = 42.1%
-全表スキャンを実行している選択の%。 (保存されたルーチンにだまされる可能性があります。)-インデックスの追加/クエリの最適化
( long_query_time ) = 10
-「遅い」クエリを定義するためのカットオフ(秒)。-提案2
( Max_used_connections / max_connections ) = 152 / 151 = 100.7%
-接続のピーク%--max_connectionsを増やすか、wait_timeoutを減らす
クエリキャッシュの半分があります。 query_cache_type=OFFとquery_cache_size=0の両方を設定する必要があります。 (噂によると)QCコードには「バグ」があり、両方の設定をオフにしない限り、一部のコードはオンのままになります。
異常に小さい:
( Innodb_pages_read + Innodb_pages_written ) / Uptime = 0.186
Created_tmp_files = 0.015 /HR
Handler_write = 0.21 /sec
Innodb_buffer_pool_bytes_data = 3 /sec
Innodb_buffer_pool_pages_data = 256
Innodb_buffer_pool_pages_total = 638
Key_reads+Key_writes + Innodb_pages_read+Innodb_pages_written+Innodb_dblwr_writes+Innodb_buffer_pool_pages_flushed = 0.25 /sec
Table_locks_immediate = 2.8 /HR
Table_open_cache_hits = 0.44 /sec
innodb_buffer_pool_chunk_size = 5MB
異常に大きい:
Com_create_db = 0.41 /HR
Com_drop_db = 0.41 /HR
Connection_errors_peer_address = 2
Performance_schema_file_instances_lost = 9
Ssl_default_timeout = 500
異常な文字列:
ft_boolean_syntax = + -><()~*:&
have_ssl = YES
have_symlink = DISABLED
innodb_fast_shutdown = 1
optimizer_trace = enabled=off,one_line=off
optimizer_trace_features = greedy_search=on, range_optimizer=on, dynamic_range=on, repeated_subselect=on
session_track_system_variables = time_zone, autocommit, character_set_client, character_set_results, character_set_connection
slave_rows_search_algorithms = TABLE_SCAN,INDEX_SCAN