Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL将同时在单个表上进行选择_Mysql - Fatal编程技术网

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应用程序还是桌面应用程序?当你看到线程已经完成了它的工作并且处于休眠状态时,可能会出现连接限制。即使您打开了多个连接,也可能仅限于一个活动连接。检查数据库和连接器设置。除此之外,您用来打开连接的代码可能正在将请求序列化为一个请求。这可能有多种原因。