InnoDB INSERT 성능의 기능


11

안녕하세요, 최신 버전의 Percona Server를 실행하고 있습니다.

서버 버전 : 5.5.24-55 GPL (Percona Server), 릴리스 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에서 기대할 수있는 쓰기 성능입니까? 이 성능을 개선하기위한 제안이 있습니까? 일반적으로 거래일 동안 5 초마다 약 1000 개의 행을 업데이트해야하므로 23,000 개의 행을 업데이트하는 것은 극단적 인 경우입니다.

내가 변경 한 다른 관련 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.

PS 전체 Innodb 설정.

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 | 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 | 모두 |
| 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 : 자동 확장 |
| 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 | 영양 |
| innodb_file_format_check | ON |
| innodb_file_format_max | 영양 |
| innodb_file_per_table | OFF |
| innodb_flush_log_at_trx_commit | 2 |
| innodb_flush_method | O_DIRECT |
| innodb_flush_neighbor_pages | 지역 |
| 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 | 선형 |
| 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 행 세트 (0.00 초)

나는 numactl --hardware를 실행했으며 여기에 내가 얻은 결과가 있습니다. 관리자의 의견은 아래에 설명되어 있습니다 (해석으로).

root @ prog : / data / mysql # numactl-하드웨어
사용 가능 : 4 개 노드 (0-3)
노드 0 CPU : 012 3
노드 0 크기 : 32766 MB
노드 0 사용 가능 : 21480MB
노드 1 CPU : 4 5 6 7
노드 1 크기 : 32768MB
노드 1 사용 가능 : 25285MB
노드 2 CPU : 12 13 14 15
노드 2 크기 : 32768MB
노드 2 사용 가능 : 20376MB
노드 3 CPU : 8 9 10 11
노드 3 크기 : 32768MB
노드 3 사용 가능 : 24898MB
노드 거리 :
노드 012 3
  0:10 16 16 16
  1:16 10 16 16
  2:16 16 10 16
  3:16 16 16 10

답변:


9

다음 영역에서 InnoDB 설정을 조정해야합니다.

다음은 InnoDB 스토리지 엔진 튜닝에 대한 과거 게시물입니다.


이 믿을 수 없을만큼 유용한 답변에 대한 Thx! 나는 당신에게 경의를 표합니다. 로그 크기와 관련하여 로그를 너무 크게 만드는 것에 대해 걱정해야합니까? 내 관심사는 Tkachenko가 mysqlperformanceblog.com/2011/09/18/disaster-mysql-5-5-flushing 에 대해 작성한 것 입니다. 나는 내가 Percona에 있다는 것을 알고 있으므로 걱정할 필요는 없다 .. 그러나 나는 실속 시나리오에 빠지지 않기를 바란다. 난 당신의 나머지 부분을 파고 있어요 ...
Don Wool

innodb_buffer_pool_instances와 관련하여 16 CPU 상자가 있습니다 (10이라고 생각했습니다). 내 관리자에 따르면 numactl은 "총 16 개의 CPU와 4 개의 RAM 블록 (각각 32G)이 있습니다. 각 RAM의 블록은 4 개의 CPU에 의해 로컬 메모리로 취급됩니다."
Don Wool

numactl --hardware질문에 출력을 실행 하고 게시하십시오. 실제 CPU를 알아 내려고 노력 중이며 관리자가 코어를 의미 할 때 CPU가 말하지 않도록하고 싶습니다.
RolandoMySQLDBA

좋아, 질문에 'numactl'의 결과를 게시했습니다.
돈 울

나에게 출력은 4 개의 CPU를 사용하는 쿼드 쿼드 코어 (16 코어)처럼 보입니다. 따라서를 설정하십시오 innodb_buffer_pool_instances=4. 하나 이상의 요청 : DB 서버에 64GB 또는 128GB가 있습니까?
RolandoMySQLDBA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.