一条select语句引起的瓶颈问题思考
程序员文章站
2023-11-24 09:05:58
情境还原: 公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与iis服务器的网络io出现瓶颈,1gb的网络带宽,占用了70%-100%,也就是每秒传输数据700mb...
情境还原:
公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与iis服务器的网络io出现瓶颈,1gb的网络带宽,占用了70%-100%,也就是每秒传输数据700mb-1gb,数据库使用内存高达21gb。
iis服务器cpu使用率时常爆至80%-90%,导致网站频频出现连接超时。
原因:晚上只好暂时关闭网站,进行服务器维护,作全面的检查跟踪,发现是一句select语句导致:
select * from table1
这条语句,语法是没问题的,但在应用上出了问题。table1存储的是10多万行数据,表数据每天都会上万的增长。
为了统计总行数,频频调用这语句,每秒刷新不低于1000次。
也因此导致网络出现瓶颈。
解决:后面把select语句改成
select count(*) from table1
即可解决问题,网络 io数据马上降至10mb以下,数据库使用内存也保持在预计范围12gb。
看似非常简单的问题,其实不然。解决这问题,所花的时间周期是6小时,检查问题使用1小时,修改代码使用5小时。
公司一项目新上线,刚上线的第2天,在后台发现数据库服务器与iis服务器的网络io出现瓶颈,1gb的网络带宽,占用了70%-100%,也就是每秒传输数据700mb-1gb,数据库使用内存高达21gb。
iis服务器cpu使用率时常爆至80%-90%,导致网站频频出现连接超时。
原因:晚上只好暂时关闭网站,进行服务器维护,作全面的检查跟踪,发现是一句select语句导致:
select * from table1
这条语句,语法是没问题的,但在应用上出了问题。table1存储的是10多万行数据,表数据每天都会上万的增长。
为了统计总行数,频频调用这语句,每秒刷新不低于1000次。
也因此导致网络出现瓶颈。
解决:后面把select语句改成
复制代码 代码如下:
select count(*) from table1
即可解决问题,网络 io数据马上降至10mb以下,数据库使用内存也保持在预计范围12gb。
看似非常简单的问题,其实不然。解决这问题,所花的时间周期是6小时,检查问题使用1小时,修改代码使用5小时。