1

Xeon 2.0Ghz サーバー (12 コア) と 16GB メモリを使用し、InnoDB (Percona) に約 50,000 レコードの Web サイト用に Apache と mySQL を実行しています。以前はクエリが約 0.17 ~ 0.25 秒で返されていましたが、Percona ツールの mySQL オプティマイザを実行し、新しい my.cnf ファイルをアップロードすると、突然同じクエリに 1.20 ~ 1.30 秒かかるようになり、約 5 倍長くなりました。

私は何を間違えましたか?ここに古いものと新しい my.cnf ファイルがあります」

新着:

[mysqld]
default_storage_engine         = InnoDB

key_buffer_size                = 32M
myisam_recover                 = FORCE,BACKUP

max_allowed_packet             = 16M
max_connect_errors             = 1000000

log_bin                        = /var/lib/mysql/mysql-bin
expire_logs_days               = 14
sync_binlog                    = 1

tmp_table_size                 = 32M
max_heap_table_size            = 32M
query_cache_type               = 0
query_cache_size               = 0
max_connections                = 200
thread_cache_size              = 50
open_files_limit               = 65535
table_definition_cache         = 1024
table_open_cache               = 2048

innodb_flush_method            = O_DIRECT
innodb_log_files_in_group      = 2
innodb_log_file_size           = 256M
innodb_flush_log_at_trx_commit = 1
innodb_file_per_table          = 1
innodb_buffer_pool_size        = 12G

log_error                      = /var/lib/mysql/mysql-error.log
log_queries_not_using_indexes  = 1
slow_query_log                 = 1
slow_query_log_file            = /var/lib/mysql/mysql-slow.log

年:

[mysqld]
innodb_buffer_pool_size = 12000M
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT
innodb_file_per_table = 1
innodb_flush_log_at_trx_commit = 2
innodb_log_buffer_size = 16M
innodb_additional_mem_pool_size = 20M
innodb_thread_concurrency = 20

read_rnd_buffer_size=50M
query_cache_size=128M
query_cache_type=1
tmp_table_size=512M
wait_timeout=90
query_cache_limit=64M
key_buffer_size=128M
max_heap_table_size=512M
max_allowed_packet=32M
log_slow_queries
log-queries-not-using-indexes
long_query_time  = 1 
4

1 に答える 1

0

しばらく走った後、まったく交換していますか?

innodb_buffer_pool_size サーバーもApacheを実行していると言うので、あなたはあなたを断ってみるかもしれません. 現時点では、MySQL がサーバーのすべてのメモリをそれ自体で使い果たし、OS と Apache には何も残さない可能性があるようです。

に設定してからに設定innodb_buffer_pool_sizeしてみてください。8Ginnodb_log_file_size2G

おそらくあなたもアップできますinnodb_thread_concurrencyが、専用のMySQLサーバーではないため、デフォルトの8で問題ない場合があります。使用しているCPUによって異なりますが、ドキュメントには次のように記載されています。

この変数の正しい値は、環境とワークロードによって異なります。アプリケーションに適した値を判断するには、さまざまな値を試してみる必要があります。推奨値は、CPU 数の 2 倍にディスク数を加えた値です。

それで、それをいじって、何が最もうまくいくか見てください.

また、あなたのデータベースはあなたが持っているRAMの量よりも大きいですか、それともDB全体がメモリに収まりますか?

同じサーバーでApacheを実行しているため、Apacheは独自のスレッドを作成し、すべてのサーバープロセスに必要なだけのメモリを消費することを覚えておいてください.PHPのようなものを実行している場合メモリも消費します。

Apache と MySQL の両方が同じシステム上で最大容量で実行できるが、どちらも他方が交換しなければならないほど多くのメモリを使用しない、適切なバランスを見つける必要があります。

パフォーマンスのトラブルシューティングまたはプロファイリングを行うその他の方法として、スロー クエリ ログを確認し、スロー クエリで Explain を実行する方法があります。さらに、Percona ツールキットをインストールして実行pt-query-digestし、パフォーマンスを分析できます。こちらのドキュメントをお読みください。

于 2012-08-03T21:40:16.053 に答える