我们使用mariadb 10.2.14运行centos directadmin安装,其中安装了magento。
目前,当一个进程运行时,我们的db经常会锁定,因此所有其他进程都在等待当前进程完成。这是一个相当大的问题,因为例如,在这种情况下,添加到购物车的过程也在等待,人们无法订购。
我们如何防止数据库被锁定这么长时间并解决这个问题?
服务器:
6x Intel Xeon
32GB RAM
500GB SSD
我的.cnf:
[mysqld]
bind-address = 127.0.0.1
local-infile=0
innodb_file_per_table=1
innodb_file_format=barracuda
slow_query_log = 1
slow_query_log_file=/var/log/mysql-log-slow-queries.log
key_buffer = 250M
key_buffer_size = 250M
max_allowed_packet = 128M
table_cache = 512
sort_buffer_size = 7M
read_buffer_size = 7M
read_rnd_buffer_size = 7M
myisam_sort_buffer_size = 64M
tmp_table_size = 190M
query_cache_type = 1
query_cache_size = 220M
query_cache_limit = 512M
thread_cache_size = 150
max_connections = 225
wait_timeout = 300
innodb_buffer_pool_size = 7G
max_heap_table_size =180M
innodb_log_buffer_size = 36M
join_buffer_size = 32M
innodb_buffer_pool_instances = 7
long_query_time = 15
table_definition_cache = 4K
open_files_limit = 60K
table_open_cache = 50767
innodb_log_file_size= 128M
innodb_lock_wait_timeout = 700
3条答案
按热度按时间qmelpv7a1#
mysql会等待一定的时间来移除锁,然后才会放弃并抛出错误。如果您能够跟踪在一天中任何一致的时间看到这些错误消息的时间,那么您应该查看服务器当时在做什么—例如,数据库备份正在运行。通过这样做,您应该能够缩小创建锁的进程的可能性,尽管这样做并不总是那么直截了当——可能是一点尝试和错误。
有时会在数据库上造成死锁问题。此问题背后的原因是,如果您正在运行大量自定义脚本,并在数据库连接有机会关闭之前终止这些脚本。
如果您可以从cli登录mysql并运行以下命令
显示进程列表;
您将得到以下输出
例如6794372,命令是sleep,时间是3800。这妨碍了其他行动。
这些进程应该使用命令逐个终止。
杀死6794372人;
一旦你杀死了所有的睡眠连接,事情就应该恢复正常了
abithluo2#
这些是不赞成的;他们的名字变了。删除它们:
这些值高于其应值:
最后一个可能是恶棍。这意味着你有一些looong交易。这是代码中的设计缺陷。想办法缩短交易时间。如果你需要帮助,描述一下你对我们做了什么。
我感觉到了
5
对于一笔交易来说是足够长的。你有时会这样吗?
lawou6xi3#
为您的my.cnf[mysqld]部分考虑的建议
下面是#to disable or remove to allow defaults to service your requirements,rick james在前面的评论中已经提到了其中一些。
. 密钥缓冲区。密钥缓冲区大小。表\u缓存。排序缓冲区大小。读取缓冲区大小。读取缓冲区大小。myisam\排序\缓冲区\大小。加入缓冲区大小。查询时间长。innodb\锁定\等待\超时
进行这些更改或在my.cnf中添加行
如需其他帮助,请查看我的个人资料,clk网络个人资料的联系信息。