Mysql 高 CPU 使用甚至优化配置
Mysql High CPU Usage even optimazed conf
我阅读了关于该问题的所有答案,但我还没有找到任何解决方案。
我有一个应用程序,由我的 api 服务器提供。 Wildfly 8.1 和 Mysql 5.6。当查看时间到来时(Wildfly 服务器连接大约 2000-3000)Mysql 使用全部 CPU。我给了 16 个核心 CPU,它使用了所有的核心。
一般我看到 %1500 CPU 用法。我尝试了很多我能找到的方法,但我仍然遇到这个问题。
你能帮我把注意力集中在某个地方吗?
我只从mysql读取数据。不多写。我不太擅长Mysql。我问是因为它。我通过 apt-get 5.6 版安装了 Mysql。这会导致问题吗?
这是我的配置文件。我有 8 GB 内存。 Ty.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 100M
log_error = /var/log/mysql/error.log
expire_logs_days = 10
max_binlog_size = 100M
innodb_file_per_table = 1
innodb_buffer_pool_size = 3G
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M
innodb_buffer_pool_instances = 2
open_files_limit = 30000
table_open_cache = 7500
thread_cache_size = 25
join_buffer_size=2M
read_rnd_buffer_size=1M
max_allowed_packet = 10M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
MySQL 可以配置为写一个慢日志,并且有很好的工具可以总结这个慢日志(即使是很好的旧 maatkit 也有很大帮助,可以直接下载而无需安装)。您可以确定在 MySQL 中花费最多时间的查询,然后通常使用 explain
和一些索引,或者再次考虑您提供给用户的页面,您可以减少 [=15= 的负载].
由于您的问题过于宽泛,可能没有针对您的问题的确切解决方案。
感谢您的回答。我解决了。我不是数据库的设计者。我快速看了一下,看到了一些索引。所以我不认为这是原因。
1 table 有近 100 万行。和索引但错误的索引。所以我索引了真实的列。 CPU 使用量从 16 核减少到 2 核。
所以索引很重要。检查你的索引两次。
我阅读了关于该问题的所有答案,但我还没有找到任何解决方案。
我有一个应用程序,由我的 api 服务器提供。 Wildfly 8.1 和 Mysql 5.6。当查看时间到来时(Wildfly 服务器连接大约 2000-3000)Mysql 使用全部 CPU。我给了 16 个核心 CPU,它使用了所有的核心。
一般我看到 %1500 CPU 用法。我尝试了很多我能找到的方法,但我仍然遇到这个问题。
你能帮我把注意力集中在某个地方吗?
我只从mysql读取数据。不多写。我不太擅长Mysql。我问是因为它。我通过 apt-get 5.6 版安装了 Mysql。这会导致问题吗?
这是我的配置文件。我有 8 GB 内存。 Ty.
[client]
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
socket = /var/run/mysqld/mysqld.sock
nice = 0
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
key_buffer = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover = BACKUP
query_cache_type = 1
query_cache_limit = 2M
query_cache_size = 100M
log_error = /var/log/mysql/error.log
expire_logs_days = 10
max_binlog_size = 100M
innodb_file_per_table = 1
innodb_buffer_pool_size = 3G
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M
innodb_buffer_pool_instances = 2
open_files_limit = 30000
table_open_cache = 7500
thread_cache_size = 25
join_buffer_size=2M
read_rnd_buffer_size=1M
max_allowed_packet = 10M
[mysqldump]
quick
quote-names
max_allowed_packet = 16M
[mysql]
#no-auto-rehash # faster start of mysql but no tab completition
[isamchk]
key_buffer = 16M
!includedir /etc/mysql/conf.d/
MySQL 可以配置为写一个慢日志,并且有很好的工具可以总结这个慢日志(即使是很好的旧 maatkit 也有很大帮助,可以直接下载而无需安装)。您可以确定在 MySQL 中花费最多时间的查询,然后通常使用 explain
和一些索引,或者再次考虑您提供给用户的页面,您可以减少 [=15= 的负载].
由于您的问题过于宽泛,可能没有针对您的问题的确切解决方案。
感谢您的回答。我解决了。我不是数据库的设计者。我快速看了一下,看到了一些索引。所以我不认为这是原因。
1 table 有近 100 万行。和索引但错误的索引。所以我索引了真实的列。 CPU 使用量从 16 核减少到 2 核。
所以索引很重要。检查你的索引两次。