`
fredlong
  • 浏览: 135079 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

mysql突然出现大量慢sql,随后redis访问超时

阅读更多

在亚马逊云买了多台的虚拟主机,一年多没有由于系统的原因出过故障。今天碰见了。

早上接到报警,从业务故障上来看,应该是数据库没有响应了。

SSH连数据库服务器,发现连不上。

重启数据库服务器,一直起不来。

最后用上周的数据库服务器的系统备份snapshot(我们的数据盘和系统盘是分开的)新建一个Volume,替换掉故障系统盘,重新启动服务器,才顺利进入系统。在用新的Volume挂靠服务器的时候,一定要记得,设备名称要和原来的系统Volume的名称一致,服务器才能顺利启动:

 

Root device  /dev/sda1

 

MYSQL服务启动后,所有服务按照顺序重启一遍,业务恢复。

 

从业务日志上来看,在6月23日22:06分左右出现大量慢sql日志,非常简单的sql语句都会等待10秒以上,随后不久出现大量redis拒绝服务的错误日志。(Redis和数据库服务部署在同一台机器上),最终导致ssh都连接不上,系统处于宕机状态。

 

分析当时的CPU和磁盘IO都处于健康状态。

 

分析Linux系统/var/log/message的日志,发现在Jun 23 08:06:33开始就出现JAVA的OOM

 

Jun 23 08:06:33 App-01 kernel: java invoked oom-killer: gfp_mask=0x280da, order=0, oom_adj=0, oom_score_adj=0

Jun 23 08:06:33 App-01 kernel: java cpuset=/ mems_allowed=0

Jun 23 08:06:33 App-01 kernel: Pid: 30096, comm: java Not tainted 2.6.32-431.17.1.el6.x86_64 #1

 

然后出现出现各种系统错误日志。

 

分析/var/log/mysqld.log,发现在23点左右出现以下日志:

 

InnoDB: Warning: a long semaphore wait:

--Thread 140539730044672 has waited at btr0cur.cc line 257 for 1775.0 seconds the semaphore:

X-lock on RW-latch at 0x7fd1f7f589c0 '&block->lock'

number of readers 0, waiters flag 0, lock_word: 100000

Last time read locked in file btr0cur.cc line 257

Last time write locked in file /home/mysql/storage/innobase/btr/btr0cur.cc line 362

InnoDB: ###### Starts InnoDB Monitor for 30 secs to print diagnostic info:

InnoDB: Pending preads 0, pwrites 0

 

=====================================

2015-06-23 23:02:52 7fd1eb5fe700 INNODB MONITOR OUTPUT

=====================================

Per second averages calculated from the last 1571 seconds

-----------------

BACKGROUND THREAD

-----------------

srv_master_thread loops: 2215108 srv_active, 0 srv_shutdown, 164283 srv_idle

srv_master_thread log flush and writes: 2379391

----------

SEMAPHORES

----------

OS WAIT ARRAY INFO: reservation count 815307

OS WAIT ARRAY INFO: signal count 905349

Mutex spin waits 13126865, rounds 31704200, OS waits 415905

RW-shared spins 503431, rounds 12970865, OS waits 375385

RW-excl spins 58495, rounds 950616, OS waits 5991

Spin rounds per wait: 2.42 mutex, 25.76 RW-shared, 16.25 RW-excl

------------

TRANSACTIONS

------------

Trx id counter 226393815

Purge done for trx's n:o < 226393810 undo n:o < 0 state: running but idle

History list length 1365

LIST OF TRANSACTIONS FOR EACH SESSION:

---TRANSACTION 226393813, not started

MySQL thread id 18660718, OS thread handle 0x7fd0ec968700, query id 195313941 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

---TRANSACTION 226393812, not started

MySQL thread id 18660719, OS thread handle 0x7fd1e4e59700, query id 195313940 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

---TRANSACTION 226393627, not started

MySQL thread id 18660553, OS thread handle 0x7fd1e63ad700, query id 195314129 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

---TRANSACTION 226393626, not started

MySQL thread id 18660552, OS thread handle 0x7fd1e5cd2700, query id 195314130 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

---TRANSACTION 226393625, not started

MySQL thread id 18660617, OS thread handle 0x7fd0ec189700, query id 195314208 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

---TRANSACTION 226393624, not started

MySQL thread id 18660618, OS thread handle 0x7fd0ec148700, query id 195314209 ip-172-31-7-84.ap-southeast-1.compute.internal 172.31.7.84 admin cleaning up

 

 

分析结论:

 

业务高峰期,JAVA/REDIS/MYSQL对服务器内存的需求都到达顶峰(目前JAVA进程的内存没有限制),在所有JAVA进程都没有FULLGC之前,可能会存在一个内存峰值,引发Linux系统开始屠杀进程。

Linux屠杀进程的过程中往往抓个最大的开始搞,mysql,redis就非常容易被搞掉。

因为这些服务还会自动重启,Linux杀着杀着就把自己给杀蒙了,就宕机了。

 

应对策略:

 

1.买两台内存更大的服务器作为资源服务器,MYSQL和REDIS从应用应用服务器迁移到资源服务器。

2.对MYSQL和Redis做高可用架构应对单机宕机的情形。

3.调整inux内核信号量默认设置,让MYSQL能撑的时间长一点。

 

参考文档:

 

http://www.cnblogs.com/GoodGoodWorkDayDayUp/p/3473348.html

http://blog.csdn.net/wulantian/article/details/37560849

 

分享到:
评论

相关推荐

    MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书V1.1

    MYSQL、ORACLE、SQLSERVER、Postgres、Redis数据库等保测评作业指导书V1.1 本文档旨在提供一个综合的数据库等保测评作业指导书,涵盖MYSQL、ORACLE、SQLSERVER、Postgres、Redis等多种数据库管理系统。该指导书旨在...

    redis集群, tomcat优化以及 MySQL5.6优化

    优化数据库访问,避免过多的 SQL 查询。 5. 使用连接池:配置连接池组件(如 Apache Commons DBCP 或 HikariCP),有效管理数据库连接,提高并发性能。 6. 服务器配置:例如开启 TCP 核心优化,调整操作系统参数如...

    redis_mysql

    1. **MySQL与Redis的关系**:两者在应用场景上有互补性,MySQL适合处理大量结构化数据,而Redis适合快速读写和临时存储。它们可以配合使用,例如将Redis作为缓存层,减轻MySQL的压力。 2. **MySQL脚本操作**:包括...

    Spring、Java、redis、zk、MySQL等面试题总结

    4. 分布式锁:Redis提供了分布式锁实现,如SETNX命令配合超时机制实现简单锁。 5. 持久化:RDB快照和AOF日志两种方式保证数据不丢失。 【Zookeeper面试知识点】 1. Zookeeper概述:Zookeeper是一个分布式的协调...

    利用Redis实现SQL伸缩的方法

    【Redis实现SQL伸缩的方法】 在应对高并发和大数据量的场景时,传统的关系型数据库(如MySQL)可能会面临性能瓶颈。此时,可以利用Redis这一内存数据存储系统来实现SQL的伸缩,提升数据库的处理能力。Redis因其高速...

    mysql面试题,免费下载

    MySQL是持久化的数据存储,适合大量数据的复杂操作,适合事务处理。Redis是内存数据库,数据读取速度快,适用于缓存和快速读取的场景,但数据非持久化,需要配合其他策略保证数据安全。 5. 索引的优势与劣势: 索引...

    Java面试解析总结:Java+Redis+数据库+解决方案+分布式...docx

    - **MySQL高并发解决方案**:面对高并发场景,除了优化SQL语句和合理使用索引外,还可以采用以下策略: - 使用分区表。 - 读写分离和主从复制。 - 优化硬件资源。 #### Spring篇 - **Spring IoC与AOP原理**:...

    18道mysql面试题以及答案详解

    4. **MySQL vs Redis**:MySQL 是持久化的数据库,适合存储大量数据,但读取速度相对较慢。Redis 是内存数据库,提供高速的数据读取,适用于缓存和实时数据处理,但数据非永久存储,依赖于缓存策略。 5. **索引的...

    MySQL数据库的常见面试题解析,建议收藏!(附答案)

    4. **MySQL与Redis的区别**:MySQL是持久化数据库,适合存储大量数据并执行复杂查询;Redis是内存数据库,提供高速数据读取,适合做缓存。Redis的数据会根据配置的策略进行淘汰,而MySQL的数据始终保存。 5. **索引...

    集合配置信息,数据库链接,redis链接,与日志打印.zip

    Go语言提供了许多数据库驱动,例如`database/sql`包,它提供了一个标准接口用于与多种数据库系统交互,如MySQL、PostgreSQL、SQLite等。通过`sql.Open()`函数,我们可以初始化一个数据库连接,并使用`sql.DB`对象...

    性能优化与SQL审计__每秒万级订单的数据库优化实践_v2.zip

    6. **异常审计**:通过设置阈值,当SQL执行出现异常时(如超时、错误等),立即报警,以便及时处理。 总的来说,性能优化与SQL审计是数据库管理的双翼,既要保证数据库高效运行,又要确保数据的安全性和合规性。...

    mysql.class.php.zip_mysql.class.php_php mysql class

    7. **缓存机制**:描述中提到的“包含缓存”,可能是指类库提供了缓存查询结果的能力,比如使用 Memcached 或者 Redis 进行数据缓存,提高查询效率。这可能涉及到 `cache_set()` 和 `cache_get()` 等方法。 8. **...

    秒杀应用的MySQL数据库优化 (转载)

    秒杀应用的MySQL数据库优化是一个重要的议题,尤其是在高并发、数据处理速度要求极高的场景下。这类应用常常面临巨大的压力,如瞬间涌入的大量请求、数据读写速度、以及资源的有效利用。本篇文章将深入探讨如何针对...

    [[高性能MySQL(第3版)].Baron.Scbwartz等.扫描版

    1. **SQL语言支持**:MySQL支持标准的SQL语言,用于数据查询、更新、管理等操作。 2. **存储引擎**:MySQL支持多种存储引擎,如InnoDB、MyISAM等,每种引擎具有不同的特点和适用场景。 3. **事务处理**:MySQL通过...

    PHP+MySQL网上购物系统

    11. **性能优化**:可能涉及到缓存策略(如文件缓存或Redis)、数据库索引优化和页面静态化。 12. **响应式设计**:现代网站通常需要适应不同设备的屏幕尺寸,了解CSS3媒体查询和Bootstrap框架可以帮助你实现这一...

    YaSQL:基于Python开发MySQL WEB版本的工单审核执行和SQL查询平台

    语法规则请参考: : 支持语法高亮,格式化,注释,补全支持MySQL / TIDB / ClickHouse / Redis查询(DMS查询功能)支持库表等级授权支持基于用户/组授权支持查询审计功能(自动记录用户执行SQL)消息推送功能邮件...

    wh swifts使用手册_201903131

    Swifts 目前支持通过 JDBC 与 MySQL、Oracle、ElasticSearch、MongoDB、Cassandra、Hbase、SQL Server 等多种数据库进行交互。 6. LOOKUP 操作:Swifts 提供了类似 SQL 的 JOIN 语法,支持单字段和多字段 JOIN。 - ...

    wh swifts使用手册_201903191

    这类似于 SQL 的 join,但 Swifts 针对不支持 SQL 的数据库如 HBase 和 Redis 提供了类似的语法支持。例如,Swifts 支持 left join,并有两种方式声明 join 条件,一种是通过 mainStreamNamespace,另一种是通过变量...

Global site tag (gtag.js) - Google Analytics