我的问题:
我有数百个线程试图查询以下查询之一:
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