パケットログデータベースがありますが、ほとんど照会されません。挿入時に高速である必要があります。 ACIDコンプライアンスを維持したいので、InnoDBを使用しています。これは、1つのパケットを失うだけでもお客様に損害を与える可能性があるためです。パフォーマンス調整シナリオでは、複数のDB接続を介してサーバーに1,000,000パケットを送信します。しかし、my.cnfで使用する設定に関係なく、12コアのシステムでmysqldプロセスが900%を超えるCPUを使用することはできません。 (ボックスでは他に何も実行されていません。)
以下を設定しました
innodb_file_per_table = 1
innodb_write_io_threads = 64
innodb_read_io_threads = 64
innodb_thread_concurrency = 0
MyISAMを使用すると、すべてのパケットを約6秒で書き込むことができます。しかし、InnoDBは約25分かかります。MySQLに残りのシステムリソースを使用させ、より速く挿入できますか?
編集:これはテーブルのスキーマです:
+-------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------+----------------------+------+-----+---------+-------+
| t | bigint(20) unsigned | YES | | NULL | |
| a | char(1) | YES | | NULL | |
| sa | int(10) unsigned | YES | | NULL | |
| sb | int(10) unsigned | YES | | NULL | |
| sc | int(10) unsigned | YES | | NULL | |
| sd | int(10) unsigned | YES | | NULL | |
| sp | smallint(5) unsigned | YES | | NULL | |
| da | int(10) unsigned | YES | | NULL | |
| db | int(10) unsigned | YES | | NULL | |
| dc | int(10) unsigned | YES | | NULL | |
| dd | int(10) unsigned | YES | | NULL | |
| dp | smallint(5) unsigned | YES | | NULL | |
+-------+----------------------+------+-----+---------+-------+
edit2:単一のクエリが最大長(約16,000,000文字)に近づくように、より多くの挿入をバッチ処理しました。データベースは2秒間1100%に急上昇し、残りの時間は100%に低下します。合計時間は21秒、つまり開始時よりも約16%速くなりました。
同様に innodb_io_capacity を上げる必要があります。
デフォルトは200です。最初に5000に増やします。 20000に行きます。
また、ib_logfile0
およびib_logfile1
は十分に大きいです。 innodb_log_file_size のデフォルト値は5Mです。初心者にはそれを1Gに引き上げます。
より大きなInnoDBバッファープールもおそらく役立ちます(おそらく4G)。
要約すると、次の追加設定を使用します。
[mysqld]
innodb_io_capacity=5000
innodb_buffer_pool_size=4G
innodb_log_file_size=1G
これらの設定をmy.cnfに追加した後、ib_logfile0/ib_logfile1のサイズを変更するには、次のようにします。
service mysql stop
rm -f /var/log/mysql/ib_logfile[01]
service mysql start
ファイルib_logfile0およびib_logfile1が再作成されます。 心配しないで、私は何度もこれをやりました 。
InnoDBでは通常とは異なることを行う必要がある場合があります
以下を試してください:
複数のコアの使用を最大化する機能に影響を与えるいくつかの要因があります。
SARなどのツールを使用すると、容量を削減しているボトルネックがあるかどうかを判断できます。警告されるだけで、1つのボトルネックが解消され、ボトルネックが移動します。