สวัสดีฉันกำลังเรียกใช้ Percona Server เวอร์ชันล่าสุด
รุ่นเซิร์ฟเวอร์: 5.5.24-55 Percona Server (GPL), Release 26.0
ฉันมีซีพียู 10 กล่องของคุณสมบัติเหล่านี้
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 of 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 แถวเป็นกรณีที่รุนแรงมากโดยทั่วไปในระหว่างวันซื้อขายฉันต้องอัปเดตประมาณ 1,000 แถวทุก 5 วินาที (ดังนั้นนั่นเป็นข้อ จำกัด ที่สมจริงยิ่งกว่าที่ฉันกำลังเผชิญ)
การตั้งค่าอื่น ๆ ที่เกี่ยวข้อง mysql.cnf ฉันมีการเปลี่ยนแปลง:
innodb_buffer_pool_size = 10G
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
BTW ถ้าแทนที่จะ Innodb ฉันสร้างตารางด้วย ENGINE = MEMORY มันใช้เวลาประมาณ 4 วินาทีในการแทรก, 6 วินาทีเพื่อทำการปรับปรุง
TIA มากมายถ้ามีคนสามารถช่วยฉันค้นหาว่าเกณฑ์มาตรฐานสำหรับการสืบค้นประเภทนี้คืออะไรหรือช่วยฉันปรับปรุงเวลา
สวม
การตั้งค่า Innodb เต็ม PS
mysql> แสดงตัวแปรทั่วโลกเช่น 'innodb%'; + + ------------------------------------------- ----- ------------------- + | Variable_name | ค่า | + + ------------------------------------------- ----- ------------------- + | innodb_adaptive_flushing | ON | | innodb_adaptive_flushing_method | ค่าประมาณ | | innodb_adaptive_hash_index | ON | | 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 | ON | | innodb_buffer_pool_shm_key | 0 | | innodb_buffer_pool_size | 10737418240 | | innodb_change_buffering | ทั้งหมด | | innodb_checkpoint_age_target | 0 | | innodb_checksums | ON | | 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 | ON | | innodb_doublewrite_file | | | innodb_fake_changes | ปิด | | innodb_fast_checksum | ปิด | | innodb_fast_shutdown | 1 | | innodb_file_format | ละมั่ง | innodb_file_format_check | ON | | 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 | ON | | innodb_stats_sample_pages | 8 | | innodb_stats_update_need_lock | 1 | | innodb_strict_mode | ปิด | | innodb_support_xa | ON | | innodb_sync_spin_loops | 30 | | innodb_table_locks | ON | | innodb_thread_concurrency | 0 | | innodb_thread_concurrency_timer_based | ปิด | | innodb_thread_sleep_delay | 10000 | | innodb_use_global_flush_log_at_trx_commit | ON | | innodb_use_native_aio | ON | | innodb_use_sys_malloc | ON | | innodb_use_sys_stats_table | ปิด | | innodb_version | 1.1.8-rel26.0 | | innodb_write_io_threads | 4 | + + ------------------------------------------- ----- ------------------- + 90 แถวในชุด (0.00 วินาที)
ฉันวิ่ง numactl - ฮาร์ดแวร์และนี่คือผลลัพธ์ที่ฉันได้รับ ความคิดเห็นจากผู้ดูแลระบบของฉันมีการระบุไว้ด้านล่าง
root @ prog: / data / mysql # numactl --hardware พร้อมใช้งาน: 4 โหนด (0-3) โหนด 0 cpus: 0 1 2 3 โหนด 0 ขนาด: 32766 MB โหนด 0 ฟรี: 21480 MB โหนด 1 ซีพียู: 4 5 6 7 ขนาดโหนด 1: 32768 MB โหนด 1 ฟรี: 25285 MB โหนด 2 ซีพียู: 12 13 14 15 ขนาดโหนด 2: 32768 MB โหนด 2 ฟรี: 20376 MB โหนด 3 cpus: 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