mysql - 为什么我将十个数据库复制到一个数据库时,MySQL 的 CPU 使用率很高?
问题描述
我有一个使用 MyISAM 表的 MySQL 5.5.49 版服务器。我有 10 个数据库,总共有大约 170,000 个表。Windows 2012 R2 服务器有 46.9GB 的 RAM 和 48 个内核。通过这种设置,MySQL 使用了大约 5%-10% 的 CPU,大约有 300 个用户在使用该应用程序。我需要为所有这些表的应用程序升级创建一个数据库。当我创建一个数据库并将所有表复制到一个数据库文件夹中时,MySQL 开始将所有内核与刚刚超过 175 个用户挂钩,并且应用程序开始爬行。有什么建议么?
应用程序使用的 MySQL 用户是很久以前创建的,具有以下权限:
grant all privileges on *.* to 'appUser'@'%' identified by 'somepassword' with grant option
当我运行“显示完整进程列表”时,我得到大量如下所示的行(使用不同的主机和时间)。我没有使用 10 个具有相同代码的数据库得到这些结果,而且这些都是 MySQL 内部查询。我没有看到我的任何实际查询:
Id User Host db Command Time State Info
101 appUser 10.1.1.20:58414 dbnew Query 45 checking permissions
SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE()AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'randomTableName'
108 appUser 10.1.1.21:49393 dbnew Query 41 checking permissions
SELECT TABLE_NAME, TABLE_COMMENT, TABLE_TYPE FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = DATABASE()AND ( TABLE_TYPE='BASE TABLE' OR TABLE_TYPE='VIEW' ) AND TABLE_NAME LIKE 'randomTableName'
.
.
.
511 appUser 127.0.0.1:53015 NULL Query 0 NULL show full processlist
最后,这是 my.ini:
[mysqld]
default-storage-engine=MYISAM
skip-name-resolve
wait_timeout=259200
port=3306
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
# CACHES AND LIMITS #
max-connections = 2000
max-allowed-packet = 3M
tmp-table-size = 64M
max-heap-table-size = 64M
#query-cache-type = 0
query-cache-size = 0M
thread-cache-size = 100
open-files-limit = 65536
table-definition-cache = 2M
table-open-cache = 256K
table_cache = 10000
#*** MyISAM Specific options
myisam_max_sort_file_size =100G
myisam_sort_buffer_size =39M
key_buffer_size =6G
read_buffer_size =64K
read_rnd_buffer_size =256K
sort_buffer_size =256K
在这个时间点上去 InnoDB 是不可行的。
解决方案
推荐阅读
- python - 如何使用 python 和 multiwii 串行协议校准 mpu6050 传感器?
- python - 在 Keras 中获取子模型的层输出
- c++ - 从 QGraphicsItem foreach 循环中获取 QGraphicsSimpleTextItem 的字符串?
- mysql - 如果满足多对多关系条件,Laravel 仅显示模型?
- python - 如何多处理一个循环遍历python中每个像素的for循环?
- c# - OAuth授权问题理解c#中的流程和代码流
- python-3.x - 找不到硒元素
- google-sheets - 如何将 ETF 的数据提取到 Google 电子表格中?
- pine-script - 输入未右对齐
- java - application.properties 中的注释