您的位置:首页 > 数据库 > MySQL

mysql 常见问题收集

2017-08-25 17:05 330 查看

mysql连接数(max_connections)。

mysql 连接数满是很常见问题,其中主要问题体现在php执行代码报错504。
php在执行mysql读取的时候因为长时间的等待超过了PHP.ini(max_excute_time)时间而返回的错误。


1、show processlist

0, 检查当前连接数简单查看数据库的排列执行的信息。

1,df -h:检查磁盘空间容量情况(此类情况居多,往往binglog数据占了很大部分)

2,iotop: 查看当前系统IO资源占用,找出占IO资源的进程。

3,hdparm -Tt /dev/vdb:检查磁盘读写情况。整个磁盘读写速度(有时候云商磁盘到期会降低磁盘IO)

2、检查线程ID情况

执行语句:SELECT * FROM information_schema.INNODB_TRX order by trx_mysql_thread_id desc。

0,trx_mysql_thread_id: 线程id,与show processlist中的id对应

1,trx_state: 线程状态,show processlist中的state

2,trx_query: 线程执行的sql语句。

3,trx_operation_state: 当前线程执行sql语句状态

4,以上信息与其他信息可以初步分析问题所在

3、使用desc检查sql语句情况

sql语句在select时候没有索引,以及查询sql语句多的情况下,会提高查询时间,不会锁表但会造成大量的链接。

1, desc sql: 检查sql执行情况。可以得到rows,keys等基础信息。

2,索引: 添加索引,包括联合索引

3,优化sql语句,使用join链接查询后,会占用一部分内存空间,如果内存不够用,可能需要使用或加大swap内存。

4,对于select的非即使数据,在业务端优先采用缓存,降低对数据的query次数。

5,开启mysql_slow_log,定时发送slow_log慢日志。

6,数据库问题不是运维问题,是需要开发与运维协作完成的

mysql 用户与连接数

0,单例模式会创造一个用户。

1,一个event事件代表一次链接请求。

2,如果在高并发,数据库性能消耗较大的情况下。可需要使用缓存:如redis对sql的结果集进行缓存,降低mysql服务的磁盘查询压力。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: