突然有一天,运营人员说,push发送数量翻倍了,是什么原因呢。
push发送过多 排查步骤:
系统在给用户发送push的时候,是根据该用户的id,查询出所有登陆过的设备,而发送设备的push的。
sql如下:
SELECT <include refid="Push_User_Columns_PAY"/> FROM push_user WHERE user_id=#userId# AND device_token is not null group by device_token
我们可以设想:如果一个用户修改手机信息,伪造各种设备,该语句返回的记录数量将会是很多的,比如超高1万甚至更多。
线上去查看了下>1000的记录数目
不看不知道,一看吓一跳。
修改sql:
SELECT <include refid="Push_User_Columns_PAY"/> FROM push_user WHERE user_id=#userId# and status=1 and device_token is not null group by device_token order by id desc limit 10
只取前10个,当然大多数是小于10个的,但是得加上limit 10的限制,试想:如果某些用户的记录数>10000,系统内存肯定撑爆,一系列的问题随着而来,full gc,系统变慢,导致不可用。
总结:在写sql的时候,一定要加上limit的限制数量,也许开始数量并不多,但数量一旦多起来的时候,就是系统变慢的时候了,所有这篇文章在此记录下。
相关推荐
SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全SQL查询语句大全
sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器sql查询分析器
sql 查询 所有子节点 方法已经调试通过(sql-server 2005)
经典的SQL查询,将内容作为字段查询,包含图片和SQL语句,很简单
SQL查询包含某个字段的所有表名 SQL查询包含某个字段的所有表名 在查询分析器中选中目标数据库,执行以下语句。
sql 联合查询 子查询 综合查询 统计数据 case when then 用法
《sql server 2005 技术内幕 T-SQL查询》 《sql server 2005 技术内幕 T-SQL程序设计》 网上大多的资源都是英文的,好容易找到中文的了,上传上来和大家分享。 这两本书都是中文的(很不容易哟),是高清晰的pdf...
Java代码替换mysql limit语句可用于分页
它详细介绍了T-SQL的内部体系结构,包含了非常全面的编程参考,提供了使用Transact-SQL(T-SQL)的专家级指导,囊括了非常全面的编程参考,揭示了基于集合的查询的强大威力,并包含大量来自专家们的参考和建议。...
extjs 在线sql查询 在线sql查询 html580 Ext.ux.window.VisualSQLQueryBuilder
Microsoft SQL Server 2005技术内幕:T-SQL查询的源代码,主要是SQL脚本
SQLServer2005技术内幕T-SQL查询的代码示例
在MySQL中,可以用 Limit 来查询第 m 列到第 n 列的记录,例如: 代码如下:select * from tablename limit m, n但是,在SQL Server中,不支持 Limit 语句。怎么办呢?解决方案:虽然SQL Server不支持 Limit ,但是它...
sql查询某个parentid下的所有childid
sqlserver数据库查询时加上行号,数据库sql代码示例
sql 语句的嵌套查询完整题,只要能全部做完,那查询的问题就不大了
注意:在检测之前要清理缓存,因为当我们执行SQL语句的时候查出的数据会在数据库中进行缓存,重新查询会返回缓存中的信息。 DBCC DROPCLEANBUFFERS DBCC FREEPROCCACHE 经验:使用子查询嵌套不要过多,尽量使用表...
在C#中使用SQL查询指定数字的记录
分页查询的成功实现,简单的类和功能函数的封装,代码具体实现。
如果想要把sql查询的结果输出到一个文本中显示,可以按照此文本中的方法来做。