こんにちは、Percona Serverの最新バージョンを実行しています。
サーバーのバージョン:5.5.24-55 Percona Server(GPL)、リリース26.0
私はこれらの特性の10 cpuボックスを持っています。
processor : 0
vendor_id : AuthenticAMD
cpu family : 16
model : 9
model name : AMD Opteron(tm) Processor 6128
stepping : 1
microcode : 0x10000d9
cpu MHz : 800.000
cache size : 512 KB
SSDと64GBのRAMを搭載しています。Innodbは約10GBであるため、innodb_buffer_pool_sizeは10GBに設定されています。
次のようなテーブルがあります。
create table TODAY
( symbol_id integer not null
, openp decimal(10,4)
, high decimal(10,4)
, low decimal(10,4)
, last decimal(10,4) not null
, volume int
, last_updated datetime -- the time of the last quote update
, prev decimal(10,4) null
, PRIMARY KEY ( symbol_id )
)
空のテーブルから始めて23,000行の挿入を行うと、約10秒かかります。その後、すべての行のすべての列が更新される更新を実行する場合(もちろん、symbol_idを除く)、11〜12秒ほど長くかかります。
これは一般的に私がInnodbに期待する書き込みパフォーマンスですか?このパフォーマンスを改善するための提案はありますか?23,000行の更新は極端なケースです。通常、取引日に5秒ごとに約1000行を更新する必要があるためです(つまり、これは私が扱っているより現実的な制約です)。
私が変更した他の関連するmysql.cnf設定:
innodb_buffer_pool_size = 10G
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
ところで、Innodbの代わりにENGINE = MEMORYでテーブルを作成すると、挿入に約4秒、更新に約6秒かかります。
誰かがこのタイプのクエリのベンチマークを理解するのを手伝ってくれたり、時間を改善するのを手伝ってくれるTIAがたくさんあります。
ドン
PS完全なInnodb設定。
mysql> 'innodb%'のようなグローバル変数を表示します。 + ------------------------------------------- + ----- ------------------- + | 変数名| 値| + ------------------------------------------- + ----- ------------------- + | innodb_adaptive_flushing | オン| | innodb_adaptive_flushing_method | 見積もり| | innodb_adaptive_hash_index | オン| | innodb_adaptive_hash_index_partitions | 1 | | innodb_additional_mem_pool_size | 8388608 | | innodb_autoextend_increment | 8 | | innodb_autoinc_lock_mode | 1 | | innodb_blocking_buffer_pool_restore | オフ| | innodb_buffer_pool_instances | 1 | | innodb_buffer_pool_restore_at_startup | 0 | | innodb_buffer_pool_shm_checksum | オン| | innodb_buffer_pool_shm_key | 0 | | innodb_buffer_pool_size | 10737418240 | | innodb_change_buffering | すべて| | innodb_checkpoint_age_target | 0 | | innodb_checksums | オン| | innodb_commit_concurrency | 0 | | innodb_concurrency_tickets | 500 | | innodb_corrupt_table_action | 主張する| | innodb_data_file_path | ibdata1:10M:autoextend | | innodb_data_home_dir | | | innodb_dict_size_limit | 0 | | innodb_doublewrite | オン| | innodb_doublewrite_file | | | innodb_fake_changes | オフ| | innodb_fast_checksum | オフ| | innodb_fast_shutdown | 1 | | innodb_file_format | アンテロープ| | innodb_file_format_check | オン| | innodb_file_format_max | アンテロープ| | innodb_file_per_table | オフ| | innodb_flush_log_at_trx_commit | 2 | | innodb_flush_method | O_DIRECT | | innodb_flush_neighbor_pages | エリア| | innodb_force_load_corrupted | オフ| | innodb_force_recovery | 0 | | innodb_ibuf_accel_rate | 100 | | innodb_ibuf_active_contract | 1 | | innodb_ibuf_max_size | 5368692736 | | innodb_import_table_from_xtrabackup | 0 | | innodb_io_capacity | 200 | | innodb_kill_idle_transaction | 0 | | innodb_large_prefix | オフ| | innodb_lazy_drop_table | 0 | | innodb_lock_wait_timeout | 50 | | innodb_locks_unsafe_for_binlog | オフ| | innodb_log_block_size | 512 | | innodb_log_buffer_size | 8388608 | | innodb_log_file_size | 67108864 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ./ | | innodb_max_dirty_pages_pct | 75 | | innodb_max_purge_lag | 0 | | innodb_mirrored_log_groups | 1 | | innodb_old_blocks_pct | 37 | | innodb_old_blocks_time | 0 | | innodb_open_files | 300 | | innodb_page_size | 16384 | | innodb_purge_batch_size | 20 | | innodb_purge_threads | 1 | | innodb_random_read_ahead | オフ| | innodb_read_ahead | 線形| | innodb_read_ahead_threshold | 56 | | innodb_read_io_threads | 4 | | innodb_recovery_stats | オフ| | innodb_recovery_update_relay_log | オフ| | innodb_replication_delay | 0 | | innodb_rollback_on_timeout | オフ| | innodb_rollback_segments | 128 | | innodb_show_locks_held | 10 | | innodb_show_verbose_locks | 0 | | innodb_spin_wait_delay | 6 | | innodb_stats_auto_update | 1 | | innodb_stats_method | nulls_equal | | innodb_stats_on_metadata | オン| | innodb_stats_sample_pages | 8 | | innodb_stats_update_need_lock | 1 | | innodb_strict_mode | オフ| | innodb_support_xa | オン| | innodb_sync_spin_loops | 30 | | innodb_table_locks | オン| | innodb_thread_concurrency | 0 | | innodb_thread_concurrency_timer_based | オフ| | innodb_thread_sleep_delay | 10000 | | innodb_use_global_flush_log_at_trx_commit | オン| | innodb_use_native_aio | オン| | innodb_use_sys_malloc | オン| | innodb_use_sys_stats_table | オフ| | innodb_version | 1.1.8-rel26.0 | | innodb_write_io_threads | 4 | + ------------------------------------------- + ----- ------------------- + セット内の90行(0.00秒)
私はnumactl --hardwareを実行し、ここに私が得た出力があります。私の管理者からのコメントを以下に示します(解釈に関して)。
root @ prog:/ data / mysql#numactl --hardware 利用可能:4ノード(0-3) ノード0 CPU:0 1 2 3 ノード0のサイズ:32766 MB ノード0フリー:21480 MB ノード1 CPU:4 5 6 7 ノード1のサイズ:32768 MB ノード1の空き容量:25285 MB ノード2 CPU:12 13 14 15 ノード2のサイズ:32768 MB ノード2の空き容量:20376 MB ノード3 CPU:8 9 10 11 ノード3のサイズ:32768 MB ノード3の空き容量:24898 MB ノード距離: ノード0 1 2 3 0:10 16 16 16 1:16 10 16 16 2:16 16 10 16 3:16 16 16 10