MySQL将同时在单个表上进行选择
我的问题:MySQL将同时在单个表上进行选择,mysql,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
[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
我有数百个线程,每个线程都试图查询以下查询之一:
SELECT max(x) FROM table1
SELECT max(x) FROM table2
SELECT max(x) FROM table3
...
SELECT max(x) FROM table100
由于这些查询中的每一个都在不同的表上工作,所以应该并行运行并快速完成,对吗?但是它工作得很慢。所以我查看了“ShowProcessList”,注意到当时只有一个查询在运行。当我刷新命令时,我看到每一个select查询大约需要2秒才能完成,而每一个查询都是“睡眠”。在这种速度下,mysql守护进程将跟不上应用程序,很快就会冻结(ShowProcessList中有151行,都处于睡眠状态)
为什么?为什么它不能并行工作
我的系统:
[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
MySQL版本为:5.5.37-0ubuntu0.12.10.1
它是一个使用mysql-connector-Java-5.1.22库的Java桌面应用程序
每个线程打开自己与数据库的连接,访问自己的一组表,一次大约有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
我想多了解一点上下文就好了,比如你使用的是什么语言,你创建的是什么连接类型,有没有连接池,这是一个web应用程序还是桌面应用程序?当你看到线程已经完成了它的工作并且处于休眠状态时,可能会出现连接限制。即使您打开了多个连接,也可能仅限于一个活动连接。检查数据库和连接器设置。除此之外,您用来打开连接的代码可能正在将请求序列化为一个请求。这可能有多种原因。