MySQL を使用して情報を保存する XMPP アプリケーションがあります。これまでのところ、特定の負荷の問題は発生していませんが、最悪の場合 (またはユーザーに関しては最高の場合;)) に備えようとしています。
この MySQL サーバーがインストールされているホストは、2GB の RAM を持つ Slicehost スライスです。
昨日、遅いクエリのログを有効にして、実際に何も遅くないことを確認しました。残念ながら、実際には多くの遅いクエリが見つかったようです。
/var/log/mysql/mysql-slow.log からの mysql スロー クエリ ログの読み取り Count: 109 Time=25.57s (2787s) Lock=0.00s (0s) Rows=1.0 (109), xxxxx[xxxxx]@[172.21.xxx.xxx] SELECT * FROM `feeds` WHERE (`id` = 'S') LIMIT N
IDは実際には主キーであるため、これは私にとって本当に奇妙です...テーブルはInnoDBです
私は説明しました:
mysql> EXPLAIN SELECT * FROM `feeds` WHERE (`id` = '2650') LIMIT 1; +----+-------------+-------+-------+-------------- --+---------+---------+-------+------+-------+ | | ID | select_type | テーブル | タイプ | 可能な_キー | キー | key_len | 参照 | 行 | 行 エクストラ | +----+-------------+-------+-------+-------------- --+---------+---------+-------+------+-------+ | | 1 | シンプル | フィード | 定数 | プライマリ | プライマリ | 4 | 定数 | 1 | | | +----+-------------+-------+-------+-------------- --+---------+---------+-------+------+-------+ セットで 1 行 (0.00 秒)
これが起こるのには別の理由があるはずです。また、ログには実際に同様のスロー クエリ (主キーを使用するクエリ) が多数あります。
ここにMySQL設定を投稿するのは理にかなっていると思います:
mysql> 変数を表示; +---------------------------------+--------------- --------------+ | | 変数名 | 値 | +---------------------------------+--------------- --------------+ | | auto_increment_increment | 1 | | | auto_increment_offset | 1 | | | automatic_sp_privileges | オン | | | back_log | 50 | | | ベースディレクトリ | /usr/ | | | binlog_cache_size | 32768 | | | bulk_insert_buffer_size | 8388608 | | | character_set_client | ラテン1 | | | character_set_connection | ラテン1 | | | character_set_database | ラテン1 | | | character_set_filesystem | バイナリ | | | character_set_results | ラテン1 | | | character_set_server | ラテン1 | | | character_set_system | utf8 | | | character_sets_dir | /usr/share/mysql/charsets/ | | | 照合接続 | latin1_swedish_ci | | | 照合データベース | latin1_swedish_ci | | | 照合サーバー | latin1_swedish_ci | | | 補完タイプ | 0 | | | 同時挿入 | 1 | | | 接続タイムアウト | 10 | | | データディレクトリ | /var/lib/mysql/ | | | 日付形式 | %Y-%m-%d | | | 日時フォーマット | %Y-%m-%d %H:%i:%s | | | default_week_format | 0 | | | delay_key_write | オン | | | 遅延挿入制限 | 100 | | | 遅延挿入_タイムアウト | 300 | | | 遅延キュー サイズ | 1000 | | | div_precision_increment | 4 | | | keep_files_on_create | オフ | | | engine_condition_pushdown | オフ | | | expire_logs_days | 10 | | | フラッシュ | オフ | | | フラッシュ時間 | 0 | | | ft_boolean_syntax | + -><()~*:""&| | | | | ft_max_word_len | 84 | | | ft_min_word_len | 4 | | | ft_query_expansion_limit | 20 | | | ft_stopword_file | (組み込み) | | | group_concat_max_len | 1024 | | | have_archive | はい | | | have_bdb | いいえ | | | have_blackhole_engine | はい | | | have_compress | はい | | | have_crypt | はい | | | have_csv | はい | | | have_dynamic_loading | はい | | | have_example_engine | いいえ | | | have_federated_engine | 無効 | | | have_geometry | はい | | | have_innodb | はい | | | have_isam | いいえ | | | have_merge_engine | はい | | | have_ndbcluster | 無効 | | | have_openssl | 無効 | | | have_ssl | 無効 | | | have_query_cache | はい | | | have_raid | いいえ | | | have_rtree_keys | はい | | | have_symlink | はい | | | ホスト名 | スーパーフィーダーデータベース | | | init_connect | | | | | 初期化ファイル | | | | | init_slave | | | | | innodb_additional_mem_pool_size | innodb_additional_mem_pool_size | 1048576 | | | innodb_autoextend_increment | 8 | | | innodb_buffer_pool_awe_mem_mb | innodb_buffer_pool_awe_mem_mb | 0 | | | innodb_buffer_pool_size | innodb_buffer_pool_size | 1073741824 | | | innodb_checksums | オン | | | innodb_commit_concurrency | innodb_commit_concurrency | 0 | | | innodb_concurrency_tickets | innodb_concurrency_tickets | 500 | | | innodb_data_file_path | innodb_data_file_path | ibdata1:10M:自動拡張 | | | innodb_data_home_dir | innodb_data_home_dir | | | | | innodb_adaptive_hash_index | innodb_adaptive_hash_index | オン | | | innodb_doublewrite | オン | | | innodb_fast_shutdown | innodb_fast_shutdown | 1 | | | innodb_file_io_threads | innodb_file_io_threads | 4 | | | innodb_file_per_table | innodb_file_per_table | オン | | | innodb_flush_log_at_trx_commit | innodb_flush_log_at_trx_commit | 2 | | | innodb_flush_method | innodb_flush_method | O_DIRECT | | | innodb_force_recovery | innodb_force_recovery | 0 | | | innodb_lock_wait_timeout | innodb_lock_wait_timeout | 50 | | | innodb_locks_unsafe_for_binlog | innodb_locks_unsafe_for_binlog | オフ | | | innodb_log_arch_dir | | | | | innodb_log_archive | オフ | | | innodb_log_buffer_size | 4194304 | | | innodb_log_file_size | 5242880 | | | innodb_log_files_in_group | 2 | | | innodb_log_group_home_dir | ./ | | | innodb_max_dirty_pages_pct | innodb_max_dirty_pages_pct | 90 | | | innodb_max_purge_lag | innodb_max_purge_lag | 0 | | | innodb_mirrored_log_groups | innodb_mirrored_log_groups | 1 | | | innodb_open_files | 300 | | | innodb_rollback_on_timeout | innodb_rollback_on_timeout | オフ | | | innodb_support_xa | innodb_support_xa | オン | | | innodb_sync_spin_loops | innodb_sync_spin_loops | 20 | | | innodb_table_locks | innodb_table_locks | オン | | | innodb_thread_concurrency | innodb_thread_concurrency | 8 | | | innodb_thread_sleep_delay | innodb_thread_sleep_delay | 10000 | | | interactive_timeout | 28800 | | | join_buffer_size | 131072 | | | key_buffer_size | 16777216 | | | key_cache_age_threshold | 300 | | | key_cache_block_size | 1024 | | | key_cache_division_limit | 100 | | | 言語 | /usr/share/mysql/英語/ | | | large_files_support | オン | | | large_page_size | 0 | | | 大きいページ | オフ | | | lc_time_names | ja_JP | | | ライセンス | GPL | | | local_infile | オン | | | ロックされたメモリ内 | オフ | | | ログ | オフ | | | log_bin | オフ | | | log_bin_trust_function_creators | オフ | | | log_error | | | | | log_queries_not_using_indexes | オン | | | log_slave_updates | オフ | | | log_slow_queries | オン | | | log_warning | 1 | | | long_query_time | 3 | | | low_priority_updates | オフ | | | lower_case_file_system | オフ | | | lower_case_table_names | 0 | | | max_allowed_packet | 16777216 | | | max_binlog_cache_size | 18446744073709547520 | | | max_binlog_size | 104857600 | | | max_connect_errors | 10 | | | max_connections | 2000年 | | | max_delayed_threads | 20 | | | max_error_count | 64 | | | max_heap_table_size | 16777216 | | | max_insert_delayed_threads | 20 | | | max_join_size | 18446744073709551615 | | | max_length_for_sort_data | 1024 | | | max_prepared_stmt_count | 16382 | | | max_relay_log_size | 0 | | | max_seeks_for_key | 18446744073709551615 | | | max_sort_length | 1024 | | | max_sp_recursion_depth | 0 | | | max_tmp_tables | 32 | | | max_user_connections | 0 | | | max_write_lock_count | 18446744073709551615 | | | multi_range_count | 256 | | | myisam_data_pointer_size | 6 | | | myisam_max_sort_file_size | 9223372036853727232 | | | myisam_recover_options | バックアップ | | | myisam_repair_threads | 1 | | | myisam_sort_buffer_size | 8388608 | | | myisam_stats_method | myisam_stats_method | nulls_不等 | | | ndb_autoincrement_prefetch_sz | 1 | | | ndb_force_send | オン | | | ndb_use_exact_count | オン | | | ndb_use_transactions | オン | | | ndb_cache_check_time | 0 | | | ndb_connectstring | | | | | net_buffer_length | 16384 | | | net_read_timeout | 30 | | | net_retry_count | 10 | | | net_write_timeout | 60 | | | 新しい | オフ | | | 古いパスワード | オフ | | | open_files_limit | 10000 | | | optimizer_prune_level | 1 | | | optimizer_search_depth | 62 | | | pid_file | /var/run/mysqld/mysqld.pid | | | plugin_dir | | | | | ポート | 3306 | | | preload_buffer_size | 32768 | | | プロファイリング | オフ | | | profiling_history_size | 15 | | | プロトコル_バージョン | 10 | | | query_alloc_block_size | 8192 | | | query_cache_limit | 1048576 | | | query_cache_min_res_unit | 4096 | | | query_cache_size | 16777216 | | | query_cache_type | オン | | | query_cache_wlock_invalidate | オフ | | | query_prealloc_size | 8192 | | | range_alloc_block_size | 4096 | | | read_buffer_size | 131072 | | | 読み取り専用 | オフ | | | read_rnd_buffer_size | 262144 | | | リレーログ | | | | | リレー ログ インデックス | | | | | リレーログ情報ファイル | リレー-log.info | | | リレー ログ パージ | オン | | | Relay_log_space_limit | 0 | | | rpl_recovery_rank | 0 | | | セキュア認証 | オフ | | | secure_file_priv | | | | | サーバー ID | 0 | | | スキップ_外部ロック | オン | | | スキップ_ネットワーキング | オフ | | | スキップ_ショー_データベース | オフ | | | スレーブ_圧縮_プロトコル | オフ | | | スレーブ_ロード_tmpdir | /tmp/ | | | slave_net_timeout | 3600 | | | slave_skip_errors | オフ | | | slave_transaction_retries | 10 | | | slow_launch_time | 2 | | | ソケット | /var/run/mysqld/mysqld.sock | | | sort_buffer_size | 2097144 | | | sql_big_selects | オン | | | sql_mode | | | | | sql_notes | オン | | | sql_warnings | オフ | | | ssl_ca | | | | | ssl_capath | | | | | ssl_cert | | | | | ssl_cipher | | | | | ssl_key | | | | | ストレージ エンジン | MyISAM | | | sync_binlog | 0 | | | sync_frm | オン | | | システムタイムゾーン | 協定世界時 | | | テーブルキャッシュ | 64 | | | table_lock_wait_timeout | 50 | | | テーブルタイプ | MyISAM | | | thread_cache_size | 8 | | | スレッドスタック | 131072 | | | 時間形式 | %H:%i:%s | | | タイムゾーン | システム | | | timed_mutex | オフ | | | tmp_table_size | 33554432 | | | tmpdir | /tmp | | | transaction_alloc_block_size | 8192 | | | transaction_prealloc_size | 4096 | | | tx_isolation | READ-COMMITTED | | | update_views_with_limit | はい | | | バージョン | 5.0.67-0ubuntu6-ログ | | | バージョンコメント | (Ubuntu) | | | バージョン_コンパイル_マシン | x86_64 | | | version_compile_os | debian-linux-gnu | | | 待機タイムアウト | 28800 | +---------------------------------+--------------- --------------+ セットで 237 行 (0.00 秒)
リクエストのほとんどは「ベーシック」ですが、ものすごいスピードが必要です!
実際にMySQLが非常に遅くなる原因について何か考えはありますか?
[概要] さまざまな回答を要約すると、次のようになります。
- "LIMIT" を削除し、WHERE id = "X" を WHERE id = X に変更します
- 多くのリソースを消費するスクリプト (バックアップなど) が時々実行されないことを確認してください。
- 「ホスト」が実際の原因ではないことを確認してください。