2011-01-08 10 views
1

データベースサーバーと他の4つのクライアントサーバーがあります。
クライアントサーバからの接続は一度に600を超えていません。
テーブルロッキングのために非常に遅いクエリが非常に多くあります。
テーブルの1つをInnoDBに変更しました。これは、より多くの更新および挿入クエリを取得します。600以上の接続を持つMySQL

データベースの最適化を手伝ってください。私はデータベース専用のサーバーを持っています。

以下はmy.cnfの設定です。

[mysqld] 
tmpdir=/tmp 
open_files_limit=33628 
log-slow-queries=/slow-query.txt 
long_query_time=1 
log-queries-not-using-indexes=1 
concurrent_insert=2 


old_passwords=1 
datadir=/var/lib/mysql 

safe-show-database 
tmp_table_size = 128M 
max_heap_table_size = 128M 
query_cache_limit=8M 
query_cache_size=128M ## 32MB for every 1GB of RAM 
query_cache_type=1 
max_user_connections=800 
max_connections=800 
collation_server=utf8_unicode_ci 
character_set_server=utf8 


delayed_insert_timeout=40 

interactive_timeout=10 
wait_timeout=3600 
connect_timeout=20 
thread_cache_size=128 
key_buffer=128M ## 32MB for every 1GB of RAM 
join_buffer=1M 
max_connect_errors=20 
max_allowed_packet=16M 
table_cache=400 
record_buffer=1M 
sort_buffer_size=4M ## 1MB for every 1GB of RAM 
read_buffer_size=4M ## 1MB for every 1GB of RAM 
read_rnd_buffer_size=4M ## 1MB for every 1GB of RAM 
thread_concurrency=8 ## Number of CPUs x 2 
myisam_sort_buffer_size=32M 
server-id=1 

[mysql.server] 
user=mysql 


[safe_mysqld] 
open_files_limit=33628 
err-log=/var/log/mysqld.log 
pid-file=/var/lib/mysql/mysql.pid 

現在、私は非持続接続を使用していますが、持続接続はパフォーマンスを向上させることができますか?

+2

このiniファイルはあなたを助けません。それはあなたのクエリであり、おそらくDB自体ではなくあなたを殺しているテーブルデザインです。 – SilverbackNet

+0

ログテーブルクエリは7/10クエリによく似ています。 1秒あたりの平均クエリ数は1秒あたり70を超えています。 – itsoft3g

答えて

1

解決策の1つは、すべての読み取り操作で追加のスレーブDBサーバーをセットアップし、マスターにのみ書き込みを行うことです。

しかし、そのように思えば、遅いクエリの原因となっているすべてのテーブルに対してmyisamからinnodbに移動し、クエリに時間がかかりすぎないように適切なインデックスを構築することで、ほとんどのメリットが得られます。

# You can set .._buffer_pool_size up to 50 - 80 % 
# of RAM but beware of setting memory usage too high 
innodb_buffer_pool_size = 6144M 

が、本当に設定を最適化する魔法の問合せレベルで問題を解決するつもりはない:メモリのバッファー・プールの多くを与える限りInnoDBが行くように

、 パフォーマンスが大幅に向上します。

+0

MyISAMと比べてInnoDBの検索(クエリの選択)が遅いですか? 効率的です。 また、適切なインデックスを持つクエリを最適化しました。 – itsoft3g

+0

良いアドバイスです。 MyISAMは、テーブルを書き込むときにテーブルをロックし、他のクエリをブロックします。マスター/スレーブを設定する前に、MyISAMテーブルをInnoDBに変換してみてください –

+0

そしてmysqltuner.plはサーバを調整するのに役立ちます –

0

クエリ、構造体、およびインデックスが表示されていないと、私は@SliverbackNetでもクエリ/テーブルの設計についてあなたを殺していると思います。コンテンツで幾分静的なクエリがある場合、いくつかの結果を取得してより重要なクエリを調整して最適化するために、一部のテーブルを事前に集計しようとします。最大のボトルネックの原因となっているクエリを特定します。

関連する問題