InnoDB INSERT Performansının Yetenekleri


11

Merhaba Percona Server'ın en son sürümünü çalıştırıyorum.

Sunucu sürümü: 5.5.24-55 Percona Server (GPL), Sürüm 26.0

Bu özelliklere sahip 10 işlemci kutum var.

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 ve 64GB RAM'e sahiptir. Innodb yaklaşık 10GB olduğundan, innodb_buffer_pool_size 10GB olarak ayarlanmıştır.

Aşağıdaki gibi bir tablo var:

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 )
)

Boş bir tabloyla başlayıp 23.000 satırlık bir ekleme yaparsam yaklaşık 10 saniye sürer. Daha sonra her satırın her sütununun güncellendiği bir güncelleme yaparsam (tabii ki symbol_id hariç) 11-12 saniye gibi biraz daha zaman alır.

Bu genel olarak Innodb'dan beklemem gereken yazma performansı mı? Bu performansı artırmak için herhangi bir öneriniz var mı? 23.000 satırı güncellemek aşırı bir durumdur, tipik olarak bir işlem günü boyunca her 5 saniyede yaklaşık 1000 satırı güncellemem gerekir (yani, ele aldığım daha gerçekçi kısıtlama).

Değiştirdiğim diğer ilgili mysql.cnf ayarları:

innodb_buffer_pool_size = 10G
innodb_log_file_size    = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT

BTW Innodb yerine tabloyu ENGINE = MEMORY ile oluşturuyorum. Eklemenin yapılması yaklaşık 4 saniye, güncellemenin yapılması 6 saniye sürüyor.

Birisi bu tür bir sorgu için karşılaştırmanın ne olduğunu anlamama yardımcı olabilirse veya zamanı iyileştirmeme yardımcı olursa, birçok TIA.

Don

PS tam Innodb ayarları.

mysql> 'innodb%' gibi global değişkenleri gösterir;
+ ------------------------------------------- + ----- ------------------- +
| Değişken_adı | Değer |
+ ------------------------------------------- + ----- ------------------- +
| innodb_adaptive_flushing | AÇIK |
| innodb_adaptive_flushing_method | tahmin |
| innodb_adaptive_hash_index | AÇIK |
| 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 | KAPALI |
| innodb_buffer_pool_instances | 1 |
| innodb_buffer_pool_restore_at_startup | 0 |
| innodb_buffer_pool_shm_checksum | AÇIK |
| innodb_buffer_pool_shm_key | 0 |
| innodb_buffer_pool_size | 10737418240 |
| innodb_change_buffering | hepsi |
| innodb_checkpoint_age_target | 0 |
| innodb_checksums | AÇIK |
| innodb_commit_concurrency | 0 |
| innodb_concurrency_tickets | 500 |
| innodb_corrupt_table_action | iddia etmek |
| innodb_data_file_path | ibdata1: 10M: otomatik uzatma |
| innodb_data_home_dir | |
| innodb_dict_size_limit | 0 |
| innodb_doublewrite | AÇIK |
| innodb_doublewrite_file | |
| innodb_fake_changes | KAPALI |
| innodb_fast_checksum | KAPALI |
| innodb_fast_shutdown | 1 |
| innodb_file_format | Antilop |
| innodb_file_format_check | AÇIK |
| innodb_file_format_max | Antilop |
| innodb_file_per_table | KAPALI |
| innodb_flush_log_at_trx_commit | 2 |
| innodb_flush_method | O_DIRECT |
| innodb_flush_neighbor_pages | alanı |
| innodb_force_load_corrupted | KAPALI |
| 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 | KAPALI |
| innodb_lazy_drop_table | 0 |
| innodb_lock_wait_timeout | 50 |
| innodb_locks_unsafe_for_binlog | KAPALI |
| 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 | KAPALI |
| innodb_read_ahead | doğrusal |
| innodb_read_ahead_threshold | 56 |
| innodb_read_io_threads | 4 |
| innodb_recovery_stats | KAPALI |
| innodb_recovery_update_relay_log | KAPALI |
| innodb_replication_delay | 0 |
| innodb_rollback_on_timeout | KAPALI |
| 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 | AÇIK |
| innodb_stats_sample_pages | 8 |
| innodb_stats_update_need_lock | 1 |
| innodb_strict_mode | KAPALI |
| innodb_support_xa | AÇIK |
| innodb_sync_spin_loops | 30 |
| innodb_table_locks | AÇIK |
| innodb_thread_concurrency | 0 |
| innodb_thread_concurrency_timer_based | KAPALI |
| innodb_thread_sleep_delay | 10000 |
| innodb_use_global_flush_log_at_trx_commit | AÇIK |
| innodb_use_native_aio | AÇIK |
| innodb_use_sys_malloc | AÇIK |
| innodb_use_sys_stats_table | KAPALI |
| innodb_version | 1.1.8-rel26.0 |
| innodb_write_io_threads | 4 |
+ ------------------------------------------- + ----- ------------------- +
Sette 90 satır (0.00 saniye)

Numactl - hardware'i çalıştırdım ve işte aldığım çıktı. Yöneticimden yorumlar aşağıda belirtilmiştir (yoruma yönelik olarak).

root @ prog: / veri / mysql # numactl - donanım
mevcut: 4 düğüm (0-3)
düğüm 0 cpus: 0 1 2 3
düğüm 0 boyutu: 32766 MB
düğüm 0 ücretsiz: 21480 MB
düğüm 1 cpus: 4 5 6 7
düğüm 1 boyutu: 32768 MB
düğüm 1 ücretsiz: 25285 MB
düğüm 2 cpus: 12 13 14 15
düğüm 2 boyutu: 32768 MB
düğüm 2 ücretsiz: 20376 MB
düğüm 3 cpus: 8 9 10 11
düğüm 3 boyutu: 32768 MB
düğüm 3 ücretsiz: 24898 MB
düğüm mesafeleri:
düğüm 0 1 2 3
  0: 10 16 16 16
  1: 16 10 16 16
  2: 16 16 10 16
  3: 16 16 16 10

Yanıtlar:


9

InnoDB ayarlarınızı aşağıdaki alanlarda ayarlamanız gerekir:

İşte InnoDB depolama motorunu ayarlama ile ilgili geçmiş yayınlarım


Bu inanılmaz faydalı cevap için teşekkürler !! Seni selamlıyorum. Günlük boyutuyla ilgili olarak, çok büyük hale getirme konusunda endişelenmem gerekiyor mu? benim endişem Tkachenko mysqlperformanceblog.com/2011/09/18/disaster-mysql-5-5-flushing hakkında yazdığı bir şey . Percona'da olduğumu fark ediyorum, bu yüzden belki de bu bir endişe değil .. ama bir durak senaryosuna girmediğimden emin olmak istiyorum. Cevabınızın geri kalanını inceliyorum ...
Don Wool

açısından innodb_buffer_pool_instances Ben 16-cpu bir kutu var (10 olduğunu düşündüm). yöneticim numactl ile ilgili olarak "Toplam 16 CPU'nuz ve dört RAM bloğunuz, her biri 32G. Her RAM bloğu dört CPU tarafından yerel bellek olarak kabul edilir."
Don Wool

Lütfen numactl --hardwaresorudaki çıktıyı çalıştırın ve yayınlayın. Fiziksel CPU'ları anlamaya çalışıyorum ve yöneticinin çekirdek anlamına geldiğinde CPU'ları söylemediğinden emin olmak istiyorum.
RolandoMySQLDBA

Tamam soruya 'numactl' çıktı gönderdi.
Don Wool

Bana göre, çıktı 4 CPU kullanarak dörtlü çekirdek (16 çekirdek) gibi görünüyor. Bu nedenle ayarlayın innodb_buffer_pool_instances=4. Bir istek daha: Lütfen tekrar kontrol edin, DB sunucusunun 64GB veya 128GB'ı var mı ???
RolandoMySQLDBA
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.