web-dev-qa-db-ja.com

64GBのMy.cnf RAM

次のmy.cnfファイルは、64 GBのRAM(Debian))の専用サーバーに適していますか?

私はサーバー上で1つのWebサイトのみを実行しており、いくつかのテーブルに高負荷のデータを挿入すると数世紀かかります... DBがいくつかのテーブルロックを処理できないようです(50Mbテーブル、それほど多くない)。

よろしければ、すべてのクエリを分析するようにします。

どんな助けでも本当に感謝します!

[クライアント]

port            = 3306
socket          = /var/run/mysqld/mysqld.sock

[mysqld]
port            = 3306
socket          = /var/run/mysqld/mysqld.sock

back_log = 50

skip-networking

max_connections = 100

max_connect_errors = 10

table_open_cache = 4096

table-definition-cache = 4096

skip-external-locking

skip-name-resolve

max_allowed_packet = 32M

binlog_cache_size = 2M

max_heap_table_size = 64M

read_buffer_size = 4M

read_rnd_buffer_size = 32M

sort_buffer_size = 16M

join_buffer_size = 8M

thread_cache_size = 20

thread_concurrency = 16

query_cache_type=1

query_cache_size = 1024M

query_cache_limit = 2M

ft_min_Word_len = 4

default-storage-engine = MYISAM

thread_stack = 192K

transaction_isolation = REPEATABLE-READ

tmp_table_size = 4G

log-bin=mysql-bin

binlog_format=mixed

slow_query_log

long_query_time = 2

server-id = 1

key_buffer_size = 16G

bulk_insert_buffer_size = 256M

myisam_sort_buffer_size = 246M

myisam_max_sort_file_size = 10G

myisam_repair_threads = 1

myisam_recover

innodb_additional_mem_pool_size = 16M

innodb_buffer_pool_size = 12G

innodb_data_file_path = ibdata1:10M:autoextend

innodb_file_io_threads = 4

innodb_thread_concurrency = 16

innodb_flush_log_at_trx_commit = 1

innodb_log_buffer_size = 8M

innodb_log_file_size = 256M

innodb_log_files_in_group = 3

innodb_max_dirty_pages_pct = 90

innodb_lock_wait_timeout = 120

max_allowed_packet = 16M

[mysql]

no-auto-rehash

[myisamchk]

key_buffer_size = 512M

sort_buffer_size = 512M

read_buffer = 8M

write_buffer = 8M

[mysqlhotcopy]

interactive-timeout

[mysqld_safe]

open-files-limit = 8192
2
Tom Glary

MySQL構成のチューニングに役立つ優れたツールは Percona構成Wizard です。これにより、システムとワークロードに関するいくつかの質問が表示され、おおよその情報が得られます最初に値を調整します。

もちろんtuningという用語は、さらに改善することが有益である可能性があることを示唆していますが、これは、ワークロード、リソースの使用状況、およびボトルネックを監視するときに徐々に発生します。これは、このような投稿で一度にすべて回答できるものではありません。

ただし、私はあなたの設定について他のコメントがあります:

max_allowed_packet = 32M

後で設定ファイルでそれをより小さい値で上書きするため、これは有効になりません。下記参照。

binlog_cache_size = 2M

これはデフォルトの64倍です。あなたがそれを増やす正当な理由がない限り、しないでください。 binlogキャッシュが割り当てられていることに注意してくださいユーザースレッドごとなので、100の同時トランザクションがある場合、これは200MBのRAMを使用します。この行を削除してデフォルトを使用することをお勧めします。

max_heap_table_size = 64M

これはtmp_table-sizeを制約します。下記参照。

read_buffer_size = 4M

これはデフォルトの32倍です。 MyISAMテイルのテーブルスキャン中にのみ使用されます。適切なインデックスを作成し、テーブルスキャンを回避することをお勧めします。この行を削除してデフォルトを使用することをお勧めします。

read_rnd_buffer_size = 32M

これは、デフォルトの128倍、最大許容値の2Mの16倍です。これは、MySQL 5.5以前ではMyISAM読み取りにのみ使用され、MySQL 5.6ではマルチレンジ読み取りにも使用されます。しかし、おそらくそれを増やす必要はありません。この行を削除してデフォルトを使用することをお勧めします。

sort_buffer_size = 16M

これはデフォルトの4倍です。 MySQL 5.6では、デフォルトの16倍です。これは各ユーザースレッドに割り当てられるバッファでもあるので、どれだけ大きくするかに注意してください。この行を削除してデフォルトを使用することをお勧めします。

join_buffer_size = 8M

これはデフォルトの64倍であるため、値を増やす十分な理由があることを確認してください。これは、インデックススキャンおよびインデックスなしの列での結合中に使用されます。テーブルにインデックスを付ける方が良いでしょう。ジョインバッファは各ユーザースレッドに割り当てることができるため、この8MBの容量はメモリの予期しない増加を説明できることに注意してください。この行を削除してデフォルトを使用することをお勧めします。

thread_cache_size = 20

最新のLinuxカーネルは、スレッドを以前よりはるかに高速に作成できるため、スレッドキャッシュを保持することはそれほど重要ではなくなりました。この行を削除してデフォルトを使用することをお勧めします。

thread_concurrency = 16

Solarisで実行していますか?そうでない場合、この変数には目的がありません。この行を削除することをお勧めします。

query_cache_type=1
query_cache_size = 1024M

これは、多くのRAMクエリキャッシュ専用にするためのもので、おそらく割り当て超過です。クエリキャッシュには、特に多数の同時接続がある場合に、いくつかの欠点があります。頻繁にクエリを無効にすることをお勧めしますあなたが多額の資金を得ていることを実証できない限り、キャッシュを使用してください。

bothquery_cache_type=0およびquery_cache_size=0を設定して無効にします。

ft_min_Word_len = 4

これがデフォルトです。この行を削除してデフォルトを使用することをお勧めします。

default-storage-engine = MYISAM

デフォルトのストレージエンジンをInnoDBに設定することをお勧めします。

MyISAMを使用しないことをお勧めします。 MyISAMはテーブルロックのみをサポートしており、クラッシュによる破損の影響を受けやすく、開発されておらず、段階的に廃止されています。 MyISAMがInnoDBよりも速いという主張は、非常に古いバージョンのMySQLに基づいています。 2007年までさかのぼって ベンチマークは、InnoDBがMyISAMより速いことを示しています ほとんどのワークロードで。

MyISAMを使用する最後の理由の1つであるフルテキストインデックスも廃止されました。 InnoDBはフルテキストインデックスを取得しています(それらは5.6で導入されましたが、まだ実際には使用できません)。 Sphinx Search とにかく全文検索に適しています。

thread_stack = 192K

これは、実際にはlowerで、64ビットシステムのデフォルトの256Kよりも大きくなっています。この行を削除してデフォルトを使用することをお勧めします。

transaction_isolation = REPEATABLE-READ

これがデフォルトです。この行を削除してデフォルトを使用することをお勧めします。

tmp_table_size = 4G

これは、以前に32Mに設定したmax_heap_table_size以上のtmpテーブルを許可しません。したがって、大きなtmpテーブルが必要な場合は、一致するようにその構成変数も増やす必要があります。ただし、複数のスレッドがメモリ内の4G tmpテーブルにデータを投入し、スワップを開始する可能性があるため、注意してください。

key_buffer_size = 16G
bulk_insert_buffer_size = 256M
myisam_sort_buffer_size = 246M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover

これらはMyISAMでのみ使用され、MyISAMを使用しない場合は必要ありません。

innodb_additional_mem_pool_size = 16M

これは、動的メモリ割り当てがInnoDBにメモリを事前割り当てさせるよりも実際に効率的である、最新のLinuxカーネルでは意味がありません。この行を削除してデフォルトを使用することをお勧めします。

innodb_buffer_pool_size = 12G

これは、可能であれば、すべてのInnoDBデータとインデックスを保持するのに十分であり、さらに変更バッファーのためにおそらく約10%余分です。

InnoDBデータとインデックスのサイズをクエリできます:

SELECT SUM(data_length+index_length)/1024/1024 AS total_InnoDB_size_in_MB
FROM INFORMATION_SCHEMA.TABLES
WHERE engine = 'InnoDB';

合計が物理システムのサイズよりも大きい場合RAM(64G))の場合、バッファプールを可能な限り増やします。通常、システムRAMの約80%が推奨されます。同じサーバー上に他のメモリを大量に消費していない場合は、他のプロセスに必要なメモリを差し引いてください。

データがシステムRAMよりもはるかに小さい場合、大きなバッファープールを割り当てるメリットはありません。バッファープールには、データとインデックスの各ページのコピーが1つだけ保持されます。

innodb_data_file_path = ibdata1:10M:autoextend

これがデフォルトです。

innodb_file_io_threads = 4

この変数はMySQL 5.0(または InnoDBプラグインを有効にする でない限り5.1)以降は認識されません。 innodb_read_io_threadsおよびinnodb_write_io_threadsを使用します。さらに、とにかく変数をデフォルト値に設定しているので、設定ファイルにこの行は必要ありません。

この変数が認識されるのに十分古いバージョンのMySQLをまだ実行している場合は、アップグレードすることを強くお勧めします。

innodb_thread_concurrency = 16

MySQLの非常に古いバージョンを実行しているのでない限り、これはおそらく時代遅れです。ボトルネックが見られない限り、この行を削除してデフォルトの0(無制限のスレッド並行性)を使用することをお勧めします。

innodb_flush_log_at_trx_commit = 1

これがデフォルトです。この行を削除してデフォルトを使用することをお勧めします。

innodb_log_buffer_size = 8M

これがデフォルトです。この行を削除してデフォルトを使用することをお勧めします。

innodb_log_file_size = 256M

これで十分ですか?過度に?これが役立つブログです: http://www.mysqlperformanceblog.com/2008/11/21/how-to-calculate-a-good-innodb-log-file-size/

innodb_log_files_in_group = 3

グループ内のinnodbログファイルを変更してもメリットはありません。この行を削除してデフォルトを使用することをお勧めします。

innodb_max_dirty_pages_pct = 90

これはMySQL 5.0のデフォルトでした。現在のデフォルトは75です。しかし、関係なくダーティページがそれほど多くなることはほとんどありません。この行を削除してデフォルトを使用することをお勧めします。

innodb_lock_wait_timeout = 120

デフォルトは50(秒)で、ほとんどのワークロードに適しています。これを120に増やす理由はありますか?

max_allowed_packet = 16M

以前にmax_allowed_pa​​cketを32Mに設定しました。設定ファイルで特定の変数を複数回設定した場合は、last設定が優先されることに注意してください。したがって、パケットは16Mに制限されます。 32Mまで許可する場合は、この行を削除してください。

[myisamchk]

[mysqlhotcopy]

myisamchkとmysqlhotcopyは、MyISAMテーブルとARCHIVEテーブルでのみ使用されます。 InnoDBを使用するように移行する場合、これらのツールを使用する必要はありません。

8
Bill Karwin

MySQLサーバーは次のように設定できます。

InnoDBバッファープール= 52G

InnoDBログファイル= 512M

innodb_flush_method = o_direct

スレッドキャッシュ= 50

Key_buffer = 32M#MyISAMテーブルを使用している場合

Max_Connections = 500

my.cnfにこの値を設定してから、MySQLサーバーを再起動してパフォーマンスを確認してください

0
Mahesh Patil