`

数据库连接数过多,页面打不开

阅读更多
当用户收到链接数告警时,意味着连接数即将达到该实例的上限。如果实例的连接数超过了实例规定的连接数,将无法创建新的连接,这个时候会影响用户的业务;

Mysql 的连接通常是一个请求占用一个连接,如果该请求(update,insert,delete,select)长时间没有执行完毕,则会造成连接的堆积,迅速的消耗完数据库的连接数,这个时候技术支持人员就要登录数据库进行排序,看看到底是那些sql 占用了连接;
问题排查步骤:

1 、查看实例配置:
可登录RDS控制台“详情与配置”查看实例额定链接数,我们假设最高支持1500个链接

2、 查看当前的连接数:
1)可登录RDS控制台“性能监控”查看实例当前链接数。
2)或者登录数据库查询当前连接,可以使用同步帐号或者用户的业务帐号登录数据库,执行show processlist;
[root@r41d05036.xy2.aliyun.com ~]# mysql -uroot -h127.0.0.1 -P3020 -e "show processlist"|wc -l
1262
可以看到该实例已经有1262 个连接

3、排查是什么动作占用了这些连接:
[root@r41d05036.xy2.aliyun.com ~]# myql -uroot -h127.0.0.1 -P3018 -e "show full processlist">/tmp/1.log
root@r14d11038.dg.aliyun.com # more /tmp/1.log
615083 my_db 223.4.49.212:54115 my_db Query 100 Sending data
INSERT INTO tmp_orders_modify (oid, tid, seller_id, `status`, gmt_create, gmt_modified)
SELECT oid, tid, seller_id, `status`, gmt_create, gmt_modified
FROM sys_info.orders WHERE
gmt_modified < NAME_CONST('v_last',_binary'2012-12-24 10:33:00' COLLATE 'binary') AN
D gmt_modified >= NAME_CONST('v_curr',_binary'2012-12-24 10:32:00' COLLATE 'binary')
621564 my_db 223.4.49.212:46596 my_db Query 3890 sorting result
insert into tmp_trades(sid, d, h, tc, tm, tp, ic, new_tp, old_tp)
select a.seller_id as sid,
…………..
from orders_1 as a where seller_id =1 and is_detail = '1'
and created < date_format('2012-12-24 10:35:00', '%Y-%m-%d %H:00:00')
and gmt_create < date_format('2012-12-24 10:40:00', '%Y-%m-%d %H:%i:00')
and gmt_create >= date_format('2012-12-24 10:35:00', '%Y-%m-%d%H:%i:00')
group by d, h
order by d
……………….此处省略其他sql

4、分析连接占用的原因:
可以看到数据库中有长时间没有执行完成的sql,一直占用着连接没有释放,而应用的请求一直持续不断的涌入数据库,这个时候数据库的连接很快就被使用完;所以这个时候需要排查为什么这些sql 为什么长时间没有执行完毕,是索引没有创建好,还是sql执行耗时严重。

第一条sql:
INSERT INTO tmp_orders_modify (oid, tid, seller_id, `status`, gmt_create, gmt_modified)
SELECT oid, tid, seller_id, `status`, gmt_create, gmt_modified
FROM sys_info.orders WHERE
gmt_modified < NAME_CONST('v_last',_binary'2012-12-24 10:33:00' COLLATE 'binary') AN
D gmt_modified >= NAME_CONST('v_curr',_binary'2012-12-24 10:32:00' COLLATE 'binary')
是用户从sys_info 数据库中拉取订单到自己的业务库中那个,但是在orders 表上没有gmt_modified 的索引,导致了全表扫描;(更加详尽的排查方法可以参考:为什么我的RDS慢了);

第二条sql:
看到这条sql 正在进行sorting 排序,为什么导致sql 长时间sorting,通常情况下为排序的结果集太大导致排序不能在内存中完成,需要到磁盘上排序,进而导致了性能的下降;解决的办法就是降低排序的结果集,常用的手段是利用索引的有序性,消除排序,或者建立适当的索引减小结果集;我们可以看到第二条sql 的排序字段非常的复杂,但是我们可以看到查询的时间范围是很短,只有5 分钟的时间间隔,这个时候就可以在gmt_create上创建一个索引,过滤掉大部分的记录:
Alter tale order_1 add index ind_order_gmt_create(gmt_create);
(该用户对orders 进行了分表,大概有50 多张分表需要添加gmt_create 字段的索引);

5、经过上面两步的优化后,用户实例恢复正常:io 情况和connection 情况,可再次登陆RDS控制台查看连接数。
分享到:
评论

相关推荐

    JSP数据库连接池技术与应用

    3. 获取连接:在JSP页面或Servlet中,通过连接池的API获取数据库连接,而不是直接使用JDBC的DriverManager.getConnection()方法。 4. 使用与释放:执行SQL操作后,不要立即关闭连接,而是将其返回给连接池,由连接池...

    IIS连接数过多的原因及解决方法.docx

    当IIS连接数过多时,可能会导致服务器性能下降,甚至无法正常响应用户的请求。这个问题通常出现在共享服务器资源的环境中,因为多个用户共享同一台服务器,如果某个用户的站点消耗了过多的资源,会影响到其他用户的...

    JSP数据库连接池的研究与实现(源代码+文档)

    在IT行业中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而数据库连接池是优化Web应用程序性能的重要工具。本项目"JSP数据库连接池的研究与实现"着重探讨了如何在JSP应用中有效地管理和利用数据库连接...

    JSP数据库连接池的研究与实现(源代码+论文).zip

    这样可以减少数据库连接的创建和销毁开销,同时避免过多的并发连接导致数据库服务器压力过大。 JSP(JavaServer Pages)是一种基于Java的动态网页技术,它允许开发者在HTML页面中嵌入Java代码,使得网页具有更强的...

    oracle 和mysql数据库的连接池一起下载

    例如,增大最大连接数可以应对高并发请求,但过多的连接可能会消耗过多内存,因此需要找到一个平衡点。同时,合理设置超时时间能避免因长时间未释放的连接导致资源浪费。 总的来说,数据库连接池是数据库性能优化的...

    JSP数据库连接池的研究与实现(源代码+论文).rar

    7. **性能优化**:通过使用数据库连接池,项目可能实现了以下性能优化:减少连接创建和释放的时间开销,降低并发时的数据库压力,以及通过智能管理连接,避免了空闲连接过多或连接耗尽的问题。 8. **资源管理**:在...

    druid数据库连接池实现jar包.zip

    - **连接池管理**:Druid提供线程安全的数据库连接管理,避免了过多的数据库连接创建和销毁带来的性能损耗。 - **StatFilter统计监控**:可以统计SQL执行时间、次数等信息,有助于性能调优。 - **WallFilter...

    java_web.7zjava增删改查基于阿里数据库连接池

    Java Web技术是构建Web应用程序的一种常见方式,而阿里巴巴开源的Druid数据库连接池则是Java开发中广泛使用的数据库连接管理工具。本教程将深入探讨如何在Java Web应用中使用Druid进行数据库的增删改查操作。 一、...

    Oracle JDBC连接缓存对JSP数据库处理性能的优化.pdf

    - **工作机制**:Oracle JDBC连接缓存类维护了活动连接表和空闲连接表,当收到JSP页面的连接请求时,会根据最大连接数(MaxLimit)和模式(Scheme)参数决定如何处理。已释放的连接会从活动连接表转移到空闲连接表...

    WML信息查询与后端信息发布系统实现 -WML信息查询设计 -java -(报告+源码)

    数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数来设定的。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大...

    asp数据库数字分页类

    在ASP(Active Server Pages)开发中,数据库分页是一种常用的技术,用于在网页上显示大量数据时提高用户体验,避免一次性加载所有数据导致页面响应慢或内存占用过多。"asp数据库数字分页类"指的是一个ASP类库,它...

    深入探讨:PHP使用数据库永久连接方式操作MySQL的是与非

    但是,当访问量增加时,这种连接方式可能会导致数据库连接数过多,进而引发断连等不稳定问题。因此,开发者在选择使用数据库永久连接时需要谨慎权衡,考虑到实际应用场景的并发量,以及对数据库和服务器的负载能力...

    asp.net 数据库的连接和datatable类

    这样可以确保应用程序在高峰时段不会因为连接数过多而导致服务器压力过大。 同时,示例中使用了System.Configuration来从配置文件中读取数据库连接字符串("ADOStr")。这是***应用程序中常用的一种方法,可以将...

    SQL server 2008 数据库优化常用脚本

    1. **查询数据库连接数**: `select count(*) from Master.dbo.SysProcesses where dbid=db_id()` 这个脚本用于获取当前数据库的活动连接数量,有助于分析并发访问和资源竞争情况。 2. **获取前10名其他等待类型*...

    易语言MYSQL数据库分页查询

    6. **关闭连接**:完成查询后,记得关闭数据库连接,释放资源。 在实际开发中,我们还需要考虑以下几点优化: - **缓存策略**:对于频繁访问的数据,可以考虑使用缓存机制,减少对数据库的直接查询。 - **索引优化...

    SQL 数据库实现分页技术教程

    string strConn = "数据库连接字符串"; using (SqlConnection conn = new SqlConnection(strConn)) { conn.Open(); string strSQL = "SELECT * FROM 表名 ORDER BY 字段名"; SqlDataAdapter da = new ...

    ORACLE数据库日常巡检内容报告

    - **Swap usage**:监视交换分区的使用情况,避免过多的页面交换。 3. **性能监控**: - **响应时间**:监控数据库响应用户请求的速度。 - **Redo日志空间延迟**:如果写入Redo日志速度慢,可能会影响性能。 - ...

    Java的Jtable、从数据库取数据显示在表格中

    - 注意:实际开发中应避免硬编码数据库连接信息,推荐使用配置文件或环境变量等方式管理敏感信息。 3. **执行SQL查询**: - 创建`Statement`对象,并通过它执行SQL语句 `String sql = "select * from score"; ...

Global site tag (gtag.js) - Google Analytics