2012-06-05 20 views
20

非常に大量のmysqlデータベースサーバーのmy.cnfファイルを最適化するための助けを誰かが提供できることを期待しています。MySQLのmy.cnfパフォーマンスチューニングの推奨事項

Our architecture is as follows: 

Memory  : 96GB 
CPUs  : 12 
OS & Mysql : 64-bit 
Disk Space : 1.2 TB 
DB Engine : MyISAM 

私たちのWebアプリケーションは、約300のクライアントで同時に使用されます。このインフラストラクチャのパフォーマンスを最大限に引き出すために、my.cnfを調整する必要があります。

私はインデックスと最適化されたクエリがこれの主な要因であることを十分に認識していますが、適切に設定されたシステムから始めて、それに応じてクエリを体系的に再エンジニアリングしてください。

Here is our current my.cnf file content: 

[mysqld] 
datadir=/home/mysql 
socket=/home/mysql/mysql.sock 
user=mysql 

log-bin=mysql-bin 
server-id=1 
# Disabling symbolic-links is recommended to prevent assorted security risks 
symbolic-links=1 

log-slow-queries = /var/log/mysqld_slow_queries.log 
long_query_time = 10 

max_connections = 500 

key_buffer_size = 32768M 
#max_allowed_packet = 2M 
#table_open_cache = 128 
#sort_buffer_size = 1024K 
#net_buffer_length = 64K 
#read_buffer_size = 1024K 
#read_rnd_buffer_size = 1024K 
#myisam_sort_buffer_size = 8M 
query_cache_size = 128M 
query_cache_limit = 128M 

interactive_timeout = 300 
wait_timeout = 300 

# Added values after load testing 
thread_cache_size = 8 
#tmp_table_size = 256M 
#max_heap_table_size = 256M 
#table_cache = 512 
#join_buffer_size = 512 

log-error=/var/log/mysqld.log 

innodb_buffer_pool_size=128M 
#innodb_file_per_table 
#innodb_log_file_size=250M 
##innodb_buffer_pool_size=64M 
#innodb_buffer_pool_size=1024M 
#innodb_log_buffer_size=4M 
##log-bin=mysql-bin 

[mysqld_safe] 
log-error=/var/log/mysqld.log 
pid-file=/var/run/mysqld/mysqld.pid 

#[myisamchk] 
#key_buffer = 64M 
#sort_buffer = 64M 
#read_buffer = 16M 
#write_buffer = 16M 

お勧めはありますか? ありがとうございました。 RolandoMySQLDBA

によって

編集は、すべてのあなたのデータは、MyISAMテーブルであるので、このクエリを実行し、出力にローランド@

SELECT CONCAT(ROUND(KBS/POWER(1024, 
IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), 
SUBSTR(' KMG',IF(PowerOf1024<0,0, 
IF(PowerOf1024>3,0,PowerOf1024))+1,1)) 
recommended_key_buffer_size FROM 
(SELECT LEAST(POWER(2,32),KBS1) KBS 
FROM (SELECT SUM(index_length) KBS1 
FROM information_schema.tables 
WHERE engine='MyISAM' AND 
table_schema NOT IN ('information_schema','mysql')) AA) A, 
(SELECT 3 PowerOf1024) B; 

を表示してください - おかげで...そのクエリの結果が4Gでした。

+0

あなたの現在の設定に基づいて特定の遅さを経験していますか? – Randy

+0

これはほんの300人のWebユーザーのための非常に良いマシンです。さらにこれが単なるDBサーバーの場合は..このWindowsまたはLinuxですか?どちらの方法でも、私は一般に、OS /スワップとデータボリューム(datadirが存在する場所)に別々のディスク/ LUNを持つことをお勧めします。ソフトウェアの侵入などを避けてください。この設定を調整するのに役立つ「mk-query-advisor」というツールがあります。あなたの 'フロントエンド'アプリケーションが(静的なデータをキャッシュし、必要な時だけ照会するなど)適切なことをしていない限り、チューニングはあまり買わないかもしれません。 – JMC

+0

また、最適化を維持するために、毎週 'OPTIMIZE TABLE tbl_name'を呼び出す保守スクリプト(バックアップ後)を追加することもできます。また、大きなテーブルなどを分割することも検討してください。 – JMC

答えて

22

Perconaウィザードを使い、現在の設定と照らし合わせて1つずつ試してみてください。あなたが考えるかもしれない多くの適用可能な設定がないことを心配しないでください。

https://tools.percona.com/wizard

誰もがあなたが対処してきた最初のkey_buffer_sizeを指します。 96GBのメモリを使用すると、小さなデフォルト値(96Mしかない可能性があります)に注意する必要があります。

+0

ありがとうKCD!私はそこに行って、彼らの推奨設定を試してみるでしょう。それは非常に感謝していた! – Skittles

+0

問題ありません。それらの結果のどれもあなたが持っていたものとは大きく異なりますか? – KCD

+0

はい...かなり変化します。ちょうどそれらを使用してサーバーを再起動しました。私たちは明日の生産日がどれくらいになるかを待たなければなりません。彼のシステムを使用してcronsとカスタマーサービスの担当者がいっぱいです。 – Skittles

関連する問題