MySQL将在

时间:2016-03-07 17:04:52

标签: mysql

我的问题:

我有数百个线程试图查询以下查询之一:

SELECT max(x) FROM table1
SELECT max(x) FROM table2
SELECT max(x) FROM table3
...
SELECT max(x) FROM table100

由于这些查询中的每一个都在不同的表上运行,它应该并行运行并快速完成,对吧?但它工作得很慢。所以我查看"显示进程列表"并注意到当时只运行一个查询。当我刷新命令时,我看到每个选择查询大约需要2秒才能完成,而其他每个查询都是"睡眠"。在这个速度下,mysql守护进程无法跟上应用程序并很快冻结(显示进程列表中的151行,全部处于睡眠状态)

为什么?为什么它没有并行工作?

我的系统:

MySQL版本是:5.5.37-0ubuntu0.12.10.1

它是一个使用库mysql-connector-java-5.1.22

的Java桌面应用程序

每个线程都会打开自己与DB的连接,访问自己的一组表,并且一次运行大约150-230个线程。

mysql设置:

[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_limit   = 0
query_cache_size        = 0
log_error = /var/log/mysql/error.log
expire_logs_days    = 10
max_binlog_size         = 100M

ft_min_word_len=3


[mysqldump]
quick
quote-names
max_allowed_packet  = 16M

[mysql]

[isamchk]
key_buffer      = 16M

!includedir /etc/mysql/conf.d/


max_connections = 600

0 个答案:

没有答案