即使通过unix套接字文件(CentOS 6.3)连接,我也遇到了连接/login到加载的mysql服务器的问题。 在这种情况下查询很快完成 – (0.00 sec) – 但login需要几秒钟的时间,在这种情况下:
real 0m3.128s user 0m0.010s sys 0m0.011s
mysqld正在运行skip-name-resolve和一个thread_cache_size这样在这个问题中就不会创build新的线程。 这是一个基于负载的问题 ,即服务器空闲时login非常快。 服务器在强大的硬件上每秒处理大约60个连接和300个查询,所以它没有得到充分利用。
这里是它的摊位的部分,用空行注明。 我假设在read(失速read(意味着它正在等待来自服务器的响应:
$ time strace mysql -e 'select 1' [...] read(3, "# /etc/services:\n# $Id: services"..., 4096) = 4096 read(3, "ervice\nfinger 79/tcp\nfi"..., 4096) = 4096 read(3, " 209/udp "..., 4096) = 4096 read(3, "a-cluster 694/tcp "..., 4096) = 4096 read(3, " 1494/tcp "..., 4096) = 4096 read(3, "603/udp #"..., 4096) = 4096 close(3) = 0 munmap(0x7f10609da000, 4096) = 0 rt_sigaction(SIGPIPE, {SIG_IGN, [PIPE], SA_RESTORER|SA_RESTART, 0x3318c32920}, {SIG_DFL, [], 0}, 8) = 0 socket(PF_FILE, SOCK_STREAM, 0) = 3 fcntl(3, F_SETFL, O_RDONLY) = 0 fcntl(3, F_GETFL) = 0x2 (flags O_RDWR) connect(3, {sa_family=AF_FILE, path="/var/run/mysqld/mysqld.sock"}, 110) = 0 setsockopt(3, SOL_SOCKET, SO_RCVTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 setsockopt(3, SOL_SOCKET, SO_SNDTIMEO, "\2003\341\1\0\0\0\0\0\0\0\0\0\0\0\0", 16) = 0 setsockopt(3, SOL_IP, IP_TOS, [8], 4) = -1 EOPNOTSUPP (Operation not supported) setsockopt(3, SOL_SOCKET, SO_KEEPALIVE, [1], 4) = 0 read(3, "e\0\0\0\n5.5.29-ndb-7.2.10-cluster-g"..., 16384) = 105 open("/usr/lib/locale/locale-archive", O_RDONLY) = 4 fstat(4, {st_mode=S_IFREG|0644, st_size=99158576, ...}) = 0 mmap(NULL, 99158576, PROT_READ, MAP_PRIVATE, 4, 0) = 0x7f105216f000 close(4) = 0 stat("/usr/share/mysql/charsets/Index.xml", {st_mode=S_IFREG|0755, st_size=18312, ...}) = 0 brk(0x222b000) = 0x222b000 open("/usr/share/mysql/charsets/Index.xml", O_RDONLY) = 4 read(4, "<?xml version='1.0' encoding=\"ut"..., 18312) = 18312 close(4) = 0 futex(0x986300, FUTEX_WAKE_PRIVATE, 2147483647) = 0 write(3, "P\0\0\1\205\242\17\0\0\0\0\1!\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"..., 84) = 84
值得一提的是,这个mysqld是一个在NDB(MySQL Cluster)前面的API节点,但是我觉得它与NDB没有任何关系,因为对NDB表的查询也很快返回。
UPDATE
configuration我们的php应用程序使用持久连接( p:<hostname>和mysqli)完全解决了这个问题,但是与正常的mysqld和Percona XtraDB集群相比,我仍然对这个问题的低连接率感到惊讶。
回答@ HTTP500的问题,我们没有看到checking permissions状态,但在任何给定的时间看到这些:
395354 | unauthenticated user | connecting host | NULL | Connect | NULL | login | NULL |