mysql - MySQL 5.5 innoDB 写入下降,脚本变慢,锁增加
问题描述
我有一个数据库,我通过一个调用各种 API 并在 cron 上运行的 python 脚本执行插入操作。还有一些 SELECT 语句查看表中以前的值,以便根据当前和以前的数据创建平均值。
一两天内一切都运行良好,但在那之后,数据库似乎进入了一种争用形式,其中站点将丢失,锁定将增加,脚本的性能会减慢。我会在所有脚本完成后删除(从不同时避免锁定),以截断数据并保持数据库较小,以确保它不会达到其buffer_pool_size
限制。
以前我对写入量很大的数据库非常着迷,我已经将其更改为query_cache_size
最近,并且从那时起我没有进行任何额外的更改。2048M
10M
query_cache_limit
256K
网上有很多关于可以做些什么来优化它的混合评论,我的大多数表都有一个索引,因为它在 SELECT 语句和写入方面也很重。
以下是我的my.cnf
文件,如果这里有任何可能不合理且应该更改的设置,我希望有人能够提供帮助。我正在运行mysql Ver 14.14 Distrib 5.5.62, for debian-linux-gnu (x86_64)
并使用 innoDB。下面是my.cnf
文件。感谢帮助。
thread_cache_size
设置为 100,因为max_used_connections
倾向于坐在 128 上Threads_connected
。倾向于范围从 90-120。
该服务器是来自 AWS r5.xlarge 的 4 核 32gb RAM 服务器
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
[client]
port = 3306
socket = /var/lib/mysql/mysql.sock
host = 127.0.0.1
# Here is entries for some specific programs
# The following values assume you have at least 32M ram
# This was formally known as [safe_mysqld]. Both versions are currently parsed.
[mysqld_safe]
socket = /var/lib/mysql/mysql.sock
nice = 0
[mysqld]
#
# * Basic Settings
#
user = mysql
pid-file = /var/lib/mysql/mysql.pid #/var/run/mysqld/mysqld.pid
socket = /var/lib/mysql/mysql.sock #/var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 0.0.0.0
key_buffer_size = 256M
table_cache = 16394
thread_cache_size = 100
innodb_file_per_table = ON
## Per-Thread Buffers * (max_connections) = total per-thread mem usage
thread_stack = 256K #default: 32bit: 192K, 64bit: 256K
sort_buffer_size = 2M #default: 2M, larger may cause perf issues
read_buffer_size = 2M #default: 128K, change in increments of 4K
read_rnd_buffer_size = 2M #default: 256K
join_buffer_size = 2M #default: 128K
binlog_cache_size = 256K #default: 32K, size of buffer to hold TX queries
## Query Cache
query_cache_size = 10M #global buffer
query_cache_limit = 256K #max query result size to put in cache
## Connections
max_connections = 500 # was 400 #multiplier for memory usage via per-thread buffers
max_connect_errors = 100 # was 200 #default: 10
concurrent_insert = 2 #default: 1, 2: enable insert for all instances
connect_timeout = 60 #default -5.1.22: 5, +5.1.22: 10
## Table and TMP settings
max_heap_table_size = 2048M #recommend same size as tmp_table_size
bulk_insert_buffer_size = 2048M #recommend same size as tmp_table_size
tmp_table_size = 2048M #recommend 1G min
## MyISAM Engine
key_buffer = 2M #global buffer
myisam_sort_buffer_size = 256M #index buffer size for creating/altering indexes
myisam_max_sort_file_size = 512M #max file size for tmp table when creating/alering indexes
## InnoDB IO settings - 5.5.x and greater
innodb_write_io_threads = 64 # Apr7
innodb_read_io_threads = 64 # Apr7
#innodb_log_file_size = 3G
innodb_buffer_pool_size = 22G #global buffer
innodb-buffer-pool-instances = 20
innodb_additional_mem_pool_size = 24M #global buffer
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover = BACKUP
#max_connections = 100
#table_cache = 64
#thread_concurrency = 10
#
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file = /var/log/mysql/mysql.log
#general_log = 1
#
# Error log - should be very few entries.
#
log_error = /var/log/mysql/error.log
#
# Here you can see queries with especially long duration
#log_slow_queries = /var/log/mysql/mysql-slow.log
#long_query_time = 2
#log-queries-not-using-indexes
#
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
# other settings you may need to change.
#server-id = 1
#log_bin = /var/log/mysql/mysql-bin.log
expire_logs_days = 10
max_binlog_size = 100M
#binlog_do_db = include_database_name
#binlog_ignore_db = include_database_name
#
# * InnoDB
#
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
#
# * Security Features
#
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
#
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
#
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
在服务器启动超过 24 小时并且现在已达到争用状态后完成 GLOBAL STATUS。
Variable_name Value
Aborted_clients 8659
Aborted_connects 0
Binlog_cache_disk_use 0
Binlog_cache_use 0
Binlog_stmt_cache_disk_use 0
Binlog_stmt_cache_use 0
Bytes_received 10528823106
Bytes_sent 11879095113
Com_admin_commands 114321
Com_assign_to_keycache 0
Com_alter_db 0
Com_alter_db_upgrade 0
Com_alter_event 0
Com_alter_function 0
Com_alter_procedure 0
Com_alter_server 0
Com_alter_table 0
Com_alter_tablespace 0
Com_analyze 0
Com_begin 0
Com_binlog 0
Com_call_procedure 0
Com_change_db 2494
Com_change_master 0
Com_check 0
Com_checksum 0
Com_commit 21669803
Com_create_db 0
Com_create_event 0
Com_create_function 0
Com_create_index 0
Com_create_procedure 0
Com_create_server 0
Com_create_table 0
Com_create_trigger 0
Com_create_udf 0
Com_create_user 0
Com_create_view 0
Com_dealloc_sql 0
Com_delete 57847
Com_delete_multi 2
Com_do 0
Com_drop_db 0
Com_drop_event 0
Com_drop_function 0
Com_drop_index 0
Com_drop_procedure 0
Com_drop_server 0
Com_drop_table 0
Com_drop_trigger 0
Com_drop_user 0
Com_drop_view 0
Com_empty_query 0
Com_execute_sql 0
Com_flush 1
Com_grant 0
Com_ha_close 0
Com_ha_open 0
Com_ha_read 0
Com_help 0
Com_insert 10384315
Com_insert_select 4493
Com_install_plugin 0
Com_kill 0
Com_load 0
Com_lock_tables 0
Com_optimize 0
Com_preload_keys 0
Com_prepare_sql 0
Com_purge 0
Com_purge_before_date 0
Com_release_savepoint 0
Com_rename_table 0
Com_rename_user 0
Com_repair 0
Com_replace 0
Com_replace_select 0
Com_reset 0
Com_resignal 0
Com_revoke 0
Com_revoke_all 0
Com_rollback 0
Com_rollback_to_savepoint 0
Com_savepoint 0
Com_select 31617317
Com_set_option 585637
Com_signal 0
Com_show_authors 0
Com_show_binlog_events 0
Com_show_binlogs 0
Com_show_charsets 0
Com_show_collations 0
Com_show_contributors 0
Com_show_create_db 0
Com_show_create_event 0
Com_show_create_func 0
Com_show_create_proc 0
Com_show_create_table 0
Com_show_create_trigger 0
Com_show_databases 1
Com_show_engine_logs 0
Com_show_engine_mutex 0
Com_show_engine_status 4415
Com_show_events 0
Com_show_errors 0
Com_show_fields 7780
Com_show_function_status 0
Com_show_grants 0
Com_show_keys 0
Com_show_master_status 0
Com_show_open_tables 0
Com_show_plugins 0
Com_show_privileges 0
Com_show_procedure_status 0
Com_show_processlist 0
Com_show_profile 0
Com_show_profiles 0
Com_show_relaylog_events 0
Com_show_slave_hosts 0
Com_show_slave_status 0
Com_show_status 4416
Com_show_storage_engines 0
Com_show_table_status 0
Com_show_tables 2492
Com_show_triggers 0
Com_show_variables 9040
Com_show_warnings 11880457
Com_slave_start 0
Com_slave_stop 0
Com_stmt_close 48226
Com_stmt_execute 90467
Com_stmt_fetch 0
Com_stmt_prepare 48354
Com_stmt_reprepare 0
Com_stmt_reset 0
Com_stmt_send_long_data 218
Com_truncate 16
Com_uninstall_plugin 0
Com_unlock_tables 0
Com_update 11304832
Com_update_multi 0
Com_xa_commit 0
Com_xa_end 0
Com_xa_prepare 0
Com_xa_recover 0
Com_xa_rollback 0
Com_xa_start 0
Compression ON
Connections 692888
Created_tmp_disk_tables 969524
Created_tmp_files 152
Created_tmp_tables 1104523
Delayed_errors 0
Delayed_insert_threads 0
Delayed_writes 0
Flush_commands 1
Handler_commit 74944534
Handler_delete 9802964
Handler_discover 0
Handler_prepare 0
Handler_read_first 333333
Handler_read_key 61866586
Handler_read_last 3454093
Handler_read_next 13704879326
Handler_read_prev 2773935641
Handler_read_rnd 39932346
Handler_read_rnd_next 9899032663
Handler_rollback 170160
Handler_savepoint 0
Handler_savepoint_rollback 0
Handler_update 40464627
Handler_write 180607735
Innodb_buffer_pool_pages_data 768282
Innodb_buffer_pool_bytes_data 12587532288
Innodb_buffer_pool_pages_dirty 10741
Innodb_buffer_pool_bytes_dirty 175980544
Innodb_buffer_pool_pages_flushed 39908997
Innodb_buffer_pool_pages_free 563241
Innodb_buffer_pool_pages_misc 110237
Innodb_buffer_pool_pages_total 1441760
Innodb_buffer_pool_read_ahead_rnd 0
Innodb_buffer_pool_read_ahead 24195
Innodb_buffer_pool_read_ahead_evicted 0
Innodb_buffer_pool_read_requests 61256179019
Innodb_buffer_pool_reads 519946
Innodb_buffer_pool_wait_free 0
Innodb_buffer_pool_write_requests 307699280
Innodb_data_fsyncs 22277830
Innodb_data_pending_fsyncs 1
Innodb_data_pending_reads 0
Innodb_data_pending_writes 0
Innodb_data_read 10761654272
Innodb_data_reads 656718
Innodb_data_writes 59599294
Innodb_data_written 1327119237120
Innodb_dblwr_pages_written 39909506
Innodb_dblwr_writes 2757000
Innodb_have_atomic_builtins ON
Innodb_log_waits 0
Innodb_log_write_requests 22935831
Innodb_log_writes 16721934
Innodb_os_log_fsyncs 16783015
Innodb_os_log_pending_fsyncs 1
Innodb_os_log_pending_writes 0
Innodb_os_log_written 19349207552
Innodb_page_size 16384
Innodb_pages_created 111573
Innodb_pages_read 656709
Innodb_pages_written 39909506
Innodb_row_lock_current_waits 0
Innodb_row_lock_time 78010
Innodb_row_lock_time_avg 84
Innodb_row_lock_time_max 3217
Innodb_row_lock_waits 926
Innodb_rows_deleted 9802964
Innodb_rows_inserted 10494572
Innodb_rows_read 25829527401
Innodb_rows_updated 13355863
Innodb_truncated_status_writes 0
Key_blocks_not_flushed 0
Key_blocks_unused 1674
Key_blocks_used 21
Key_read_requests 358190032
Key_reads 0
Key_write_requests 116148559
Key_writes 0
Last_query_cost 0.000000
Max_used_connections 247
Not_flushed_delayed_rows 0
Open_files 48
Open_streams 0
Open_table_definitions 325
Open_tables 597
Opened_files 3878714
Opened_table_definitions 341
Opened_tables 620
Performance_schema_cond_classes_lost 0
Performance_schema_cond_instances_lost 0
Performance_schema_file_classes_lost 0
Performance_schema_file_handles_lost 0
Performance_schema_file_instances_lost 0
Performance_schema_locker_lost 0
Performance_schema_mutex_classes_lost 0
Performance_schema_mutex_instances_lost 0
Performance_schema_rwlock_classes_lost 0
Performance_schema_rwlock_instances_lost 0
Performance_schema_table_handles_lost 0
Performance_schema_table_instances_lost 0
Performance_schema_thread_classes_lost 0
Performance_schema_thread_instances_lost 0
Prepared_stmt_count 128
Qcache_free_blocks 0
Qcache_free_memory 0
Qcache_hits 0
Qcache_inserts 0
Qcache_lowmem_prunes 0
Qcache_not_cached 0
Qcache_queries_in_cache 0
Qcache_total_blocks 0
Queries 88430604
Questions 88219702
Rpl_status AUTH_MASTER
Select_full_join 3100
Select_full_range_join 806
Select_range 14288643
Select_range_check 0
Select_scan 225040
Slave_heartbeat_period 0.000
Slave_open_temp_tables 0
Slave_received_heartbeats 0
Slave_retried_transactions 0
Slave_running OFF
Slow_launch_threads 0
Slow_queries 18
Sort_merge_passes 147
Sort_range 7993917
Sort_rows 23603619
Sort_scan 934553
Ssl_accept_renegotiates 0
Ssl_accepts 0
Ssl_callback_cache_hits 0
Ssl_cipher
Ssl_cipher_list
Ssl_client_connects 0
Ssl_connect_renegotiates 0
Ssl_ctx_verify_depth 0
Ssl_ctx_verify_mode 0
Ssl_default_timeout 0
Ssl_finished_accepts 0
Ssl_finished_connects 0
Ssl_session_cache_hits 0
Ssl_session_cache_misses 0
Ssl_session_cache_mode NONE
Ssl_session_cache_overflows 0
Ssl_session_cache_size 0
Ssl_session_cache_timeouts 0
Ssl_sessions_reused 0
Ssl_used_session_cache_entries 0
Ssl_verify_depth 0
Ssl_verify_mode 0
Ssl_version
Table_locks_immediate 67102620
Table_locks_waited 0
Tc_log_max_pages_used 0
Tc_log_page_size 0
Tc_log_page_waits 0
Threads_cached 58
Threads_connected 102
Threads_created 674
Threads_running 5
Uptime 84415
Uptime_since_flush_status 84415
解决方案
推荐阅读
- ios - 具有清晰背景和彩色 contentView 的 UITableViewCell
- docker - 复制 。. 在 dockerfile
- javascript - Web Audio API 将单声道拆分为立体声
- mysql - MySQL INSERT with SELECT UNION 给出语法错误
- node.js - BigQuery:NodeJS 客户端库时间戳错误
- python - 如何恢复并执行两个独立的 TensorFlow 模型?
- javascript - 续集更新或创建包含的关联
- excel - VBA #VALUE!”使用函数时出错
- javascript - 将两个输入字段初始化为具有不同 html 类的日期选择器
- python - 如何在 Python 中进行三次或更高多项式多元回归?