zhangxinba 发表于 2018-10-11 10:19:36

mysql数据库环境优化

一、环境优化
1.1内存优化
  由于数据库主机一般内存较大,因此采用huge page。而且尽量使用80%的内存,以空间换时间。
  /etc/sysctl.conf配置参数:
  vm.hugetlb_shm_group=3306
  kernel.shmmax=243805679616
  kernel.shmall=59522871
1.2虚拟内存优化
  由于数据库对存取速度反应较大,因此关闭swap。
1.3网络优化
  由于公司需要直接访问IDC机房中数据库,因此网络需要优化。
  /etc/sysctl.conf配置参数:
  net.core.somaxconn = 40000
  net.ipv4.tcp_max_syn_backlog = 40000
  net.ipv4.ip_local_port_range = 1024 65535
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.core.wmem_max=12582912
  net.core.rmem_max=12582912
  net.ipv4.tcp_rmem= 10240 87380 12582912
  net.ipv4.tcp_wmem= 10240 87380 12582912
  net.ipv4.tcp_window_scaling = 1
  net.ipv4.tcp_timestamps = 1
  net.ipv4.tcp_sack = 1
  net.ipv4.tcp_no_metrics_save = 1
  net.core.netdev_max_backlog = 5000
1.4IO优化
  尽量减少对IO的限制。因此在保障硬盘读写正常的情况下,需要增加如下/etc/sysctl.conf参数:
  fs.file-max = 1000000
  /etc/security/limits.conf配置:
  *                softnofile                  65535
  *                hard    nofile         65535
  mysql   hard   memlockunlimited
  mysql   soft    memlockunlimited
二、数据库优化
2.1源码编译优化
  采用较优的编译参数:
  -m64 -Ofast -flto -march=native -funroll-loops -mfpmath=sse -static -g
  编译命令:
  cmake .. -DCMAKE_CXX_FLAGS_DEBUG=="-DUNIV_DEBUG -DUNIV_SYNC_DEBUG" \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo \
  -DCMAKE_C_FLAGS_RELWITHDEBINFO="-m64 -Ofast -flto -march=native -funroll-loops -mfpmath=sse -static -g" \
  -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-m64 -Ofast -flto -march=native -funroll-loops -mfpmath=sse -static -g" \
  -DBUILD_CONFIG=mysql_release \
  -DFEATURE_SET=community \
  -DWITH_EMBEDDED_SERVER=ON \
  -DCMAKE_INSTALL_PREFIX=/usr/local/percona \
  -DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
  -DMYSQL_DATADIR=/data/mysql/data \
  -DSYSCONFDIR=/etc \
  -DMYSQL_TCP_PORT=3306 \
  -DWITH_ARCHIVE_STORAGE_ENGINE=1 \
  -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
  -DWITH_FEDERATED_STORAGE_ENGINE=1\
  -DWITH_MYISAM_STORAGE_ENGINE=1 \
  -DWITH_PARTITION_STORAGE_ENGINE=1 \
  -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
  -DWITH_READLINE=system \
  -DENABLED_LOCAL_INFILE=1 \
  -DDEFAULT_CHARSET=utf8 \
  -DDEFAULT_COLLATION=utf8_general_ci \
  -DWITH_EXTRA_CHARSETS=all \
  -DWITH_FAST_MUTEXES=ON\
  -DWITH_ATOMIC_LOCKS=rwlocks
2.2内存优化
  尽量采用内存的80%,作为数据库内存空间。
  配置参数:
  innodb_buffer_pool_size=180G
  join_buffer_size=32M
  key_buffer_size=256M
  read_buffer_size=8388608
  read_rnd_buffer_size=4M
2.3连接池优化
  采用连接池,以负载高并发的访问。
  配置参数:
  thread_handling=pool-of-threads
  thread_pool_high_prio_mode=statements
  thread_pool_max_threads=100000
  thread_pool_size=48
  thread_pool_oversubscribe=10
  thread_pool_stall_limit=300
2.4IO优化
  配置参数:
  sync_binlog=1000
  innodb_read_io_threads=48
  innodb_thread_concurrency=0
  innodb_use_native_aio=1
  innodb_write_io_threads=48
  innodb_flush_method=ALL_O_DIRECT
2.5网络优化
  配置参数:
  max_connections=1000
  net_buffer_length=1M
2.6结构优化
  对一些大表进行分区处理,如crm_consume、crm_consume_detail、crm_customer等,以优化查询。
2.7综合优化
  /etc/my.cnf配置参数:
  
  audit_log_rotations=5
  audit_log_rotate_on_size=20480000
  slow_query_log=1
  slow_query_log_file=/data/mysql/data/db4-slow.log
  long_query_time=5
  back_log=1024
  big_tables=1
  bind_address=0.0.0.0
  binlog_cache_size=8M
  binlog_format=row
  basedir=/usr/local/percona
  binlog_stmt_cache_size=8M
  datadir=/data/mysql/data/
  delayed_queue_size=10000
  enforce-gtid-consistency=ON
  default_time_zone=+8:00
  event_scheduler=1
  expire_logs_days=7
  federated
  gtid_mode=ON
  innodb_additional_mem_pool_size=64M
  innodb_buffer_pool_instances=16
  metadata_locks_hash_instances=16
  table_open_cache_instances=16
  innodb_buffer_pool_size=180G
  innodb_data_file_path=ibdata1:1024M:autoextend
  innodb_data_home_dir=/data/mysql/data/
  innodb_file_per_table=1
  innodb_flush_log_at_trx_commit=2
  innodb_autoinc_lock_mode=2
  innodb_flush_method=ALL_O_DIRECT
  innodb_flush_neighbors=0
  innodb_io_capacity=1000
  innodb_lock_wait_timeout=50
  innodb_log_buffer_size=512M
  innodb_log_file_size=4096M
  innodb_log_files_in_group=3
  innodb_log_group_home_dir=/data/mysql/data/
  innodb_max_dirty_pages_pct=75
  innodb_old_blocks_pct=30
  innodb_old_blocks_time=1000
  innodb_open_files=4096
  innodb_purge_threads=1
  innodb_random_read_ahead=1
  innodb_read_io_threads=48
  innodb_thread_concurrency=0
  innodb_use_native_aio=1
  innodb_write_io_threads=48
  join_buffer_size=32M
  key_buffer_size=256M
  log-bin=mysql-bin
  log-error=/var/log/mysql-error.log
  log_output=FILE
  log_slave_updates=1
  max_allowed_packet=128M
  max_connect_errors=10000000
  max_connections=1000
  max_heap_table_size=64M
  max_tmp_tables=1024
  myisam_recover=FORCE,BACKUP
  myisam_sort_buffer_size=128M
  net_buffer_length=1M
  open_files_limit=65535
  pid-file=/data/mysql/data/mysql.pid
  port=3306
  query_cache_size=0
  query_cache_type=0
  report_host=192.168.201.11
  report_port=3306
  read_buffer_size=8388608
  read_rnd_buffer_size=4M
  relay-log=mysql-relay-bin
  log_warnings=9
  sync_binlog=1000
  rpl_semi_sync_master_enabled=1
  rpl_semi_sync_master_timeout=1000
  server-id=11
  skip-external-locking
  skip-name-resolve
  socket=/tmp/mysql.sock
  sort_buffer_size=16M
  table_definition_cache=4096
  transaction_isolation=read-committed
  table_open_cache=16384
  thread_cache_size=2048
  thread_stack=1048576
  tmp_table_size=64M
  slave_net_timeout=30
  master-info-repository=TABLE
  relay-log-info-repository=TABLE
  sync-master-info=1
  slave-parallel-workers=4
  binlog-checksum=CRC32
  master-verify-checksum=1
  slave-sql-verify-checksum=1
  binlog-rows-query-log_events=1
  thread_handling=pool-of-threads
  thread_pool_high_prio_mode=statements
  thread_pool_max_threads=100000
  thread_pool_size=48
  thread_pool_oversubscribe=10
  thread_pool_stall_limit=300
  innodb_monitor_enable = '%'
  performance_schema = ON
  performance_schema_instrument = '%=on'
三、性能测试
3.1基准测试
  利用sysbench工具进行数据库oltp测试,得出测试结论如下:
  OLTP test statistics:
  queries performed:
  read:                            481348
  write:                           137528
  other:                           68764
  total:                           687640
  transactions:                        34382(572.21 per sec.)
  read/write requests:               618876 (10299.77 per sec.)
  other operations:                  68764(1144.42 per sec.)
  ignored errors:                      0      (0.00 per sec.)
  reconnects:                        0      (0.00 per sec.)
  General statistics:
  total time:                        60.0864s
  total number of events:            34382
  total time taken by event execution: 3842.8699s
  response time:
  min:                                 23.10ms
  avg:                              111.77ms
  max:                              323.79ms
  approx.95 percentile:             166.95ms
  Threads fairness:
  events (avg/stddev):         537.2188/9.58
  execution time (avg/stddev):   60.0448/0.02
  可知:
  tps:572.21 per sec
  qps:10299.77 per sec.
3.2优化后测试
  最好的测试结论如下:
  OLTP test statistics:
  queries performed:
  read:                            7265944
  write:                           2075984
  other:                           1037992
  total:                           10379920
  transactions:                        518996 (864.91 per sec.)
  read/write requests:               9341928 (15568.43 per sec.)
  other operations:                  1037992 (1729.83 per sec.)
  ignored errors:                      0      (0.00 per sec.)
  reconnects:                        0      (0.00 per sec.)
  General statistics:
  total time:                        600.0560s
  total number of events:            518996
  total time taken by event execution: 38354.8485s
  response time:
  min:                                  6.49ms
  avg:                                 73.90ms
  max:                              252.93ms
  approx.95 percentile:             118.04ms
  Threads fairness:
  events (avg/stddev):         8109.3125/1090.72
  execution time (avg/stddev):   599.2945/0.45
  可知:
  tps:864.91 per sec
  qps:15568.43 per sec
3.3SQL测试
  采用单个SQL语句进行测试,性能也有很大的提升。

页: [1]
查看完整版本: mysql数据库环境优化