Oi, Estou executando a versão mais recente do Percona Server.
Versão do servidor: 5.5.24-55 Percona Server (GPL), versão 26.0
Eu tenho uma caixa de 10 cpu dessas características.
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
Possui SSD e 64 GB de RAM. O Innodb tem aproximadamente 10 GB, então innodb_buffer_pool_size definido como 10 GB.
Eu tenho uma tabela que é a seguinte:
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 )
)
Se eu começar com uma tabela vazia e inserir 23.000 linhas, leva cerca de 10 segundos. Se eu fizer uma atualização subsequente em que todas as colunas de todas as linhas sejam atualizadas (exceto symbol_id, é claro), isso levará mais ou menos 11 a 12 segundos.
Esse é genericamente o desempenho de gravação que devo esperar do Innodb? Existe alguma sugestão para melhorar esse desempenho? atualizar 23.000 linhas é um caso extremo, pois normalmente durante um dia de negociação eu preciso atualizar aproximadamente 1000 linhas a cada 5 segundos (essa é a restrição mais realista com a qual estou lidando).
Outras configurações relevantes do mysql.cnf foram alteradas:
innodb_buffer_pool_size = 10G
innodb_log_file_size = 64M
innodb_flush_log_at_trx_commit = 2
innodb_flush_method = O_DIRECT
BTW, se em vez de Innodb eu criar a tabela com ENGINE = MEMORY, leva cerca de 4 segundos para fazer a inserção, 6 segundos para fazer a atualização.
Muitos TIA, se alguém puder me ajudar a descobrir qual é a referência para esse tipo de consulta, ou me ajudar a melhorar o tempo.
Don
Configurações completas do PS Innodb.
mysql> mostra variáveis globais como 'innodb%'; + ------------------------------------------- + ----- ------------------- + | Nome da variável | Valor + ------------------------------------------- + ----- ------------------- + | innodb_adaptive_flushing | ON | | innodb_adaptive_flushing_method | estimativa | | 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 | OFF | | 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 | tudo | | innodb_checkpoint_age_target | 0 | innodb_checksums | ON | | innodb_commit_concurrency | 0 | innodb_concurrency_tickets | 500 | innodb_corrupt_table_action | afirmar | | 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 | OFF | | innodb_fast_checksum | OFF | | innodb_fast_shutdown | 1 | | innodb_file_format | Antílope | | innodb_file_format_check | ON | | innodb_file_format_max | Antílope | | innodb_file_per_table | OFF | | innodb_flush_log_at_trx_commit | 2 | innodb_flush_method | O_DIRECT | innodb_flush_neighbor_pages | área | | innodb_force_load_corrupted | OFF | | 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 | OFF | | innodb_lazy_drop_table | 0 | innodb_lock_wait_timeout | 50 | innodb_locks_unsafe_for_binlog | OFF | | 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 | OFF | | innodb_read_ahead | linear | | innodb_read_ahead_threshold | 56 | innodb_read_io_threads | 4 | innodb_recovery_stats | OFF | | innodb_recovery_update_relay_log | OFF | | innodb_replication_delay | 0 | innodb_rollback_on_timeout | OFF | | 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 | OFF | | innodb_support_xa | ON | | innodb_sync_spin_loops | 30 | innodb_table_locks | ON | | innodb_thread_concurrency | 0 | innodb_thread_concurrency_timer_based | OFF | | 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 | OFF | | innodb_version | 1.1.8-rel26.0 | | innodb_write_io_threads | 4 + ------------------------------------------- + ----- ------------------- + 90 linhas em conjunto (0,00 s)
Corri numctl --hardware e aqui está a saída que obtive. Os comentários do meu administrador são anotados abaixo (como para interpretação).
raiz @ prog: / data / mysql # numactl --hardware disponível: 4 nós (0-3) nó 0 cpus: 0 1 2 3 tamanho do nó 0: 32766 MB nó 0 grátis: 21480 MB nó 1 cpus: 4 5 6 7 tamanho do nó 1: 32768 MB nó 1 grátis: 25285 MB nó 2 cpus: 12 13 14 15 tamanho do nó 2: 32768 MB nó 2 livre: 20376 MB nó 3 cpus: 8 9 10 11 tamanho do nó 3: 32768 MB nó 3 grátis: 24898 MB distâncias dos nós: nó 0 1 2 3 0: 10 16 16 16 1: 16 10 16 16 2: 16 16 10 16 3: 16 16 16 10
fonte
numactl --hardware
e publique a saída na pergunta. Estou tentando descobrir CPUs físicas e quero ter certeza de que o administrador não está dizendo CPUs quando ele quer dizer núcleos.innodb_buffer_pool_instances=4
. Mais uma solicitação: verifique novamente, o servidor de banco de dados possui 64 GB ou 128 GB ???