突然有一天,運營人員說,push傳送數量翻倍了,是什麼原因呢。
push傳送過多 排查步驟:
系統在給使用者傳送push的時候,是根據該使用者的id,查詢出所有登陸過的裝置,而傳送裝置的push的。
sql如下:
select
from push_user
where user_id=#userid#
and device_token is not null group by device_token
我們可以設想:如果乙個使用者修改手機資訊,偽造各種裝置,該語句返回的記錄數量將會是很多的,比如超高1萬甚至更多。
線上去檢視了下》1000的記錄數目
不看不知道,一看嚇一跳。
修改sql:
select
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 在排序後limit 查詢疑問
select from br spec as spec order by sp sort asc limit 0,10 select from br spec as spec order by sp sort 新增limit後 列表順序發生變化 一 現象 發現第一條sql和第二條sql的排序順序不一...
MySQL 中子查詢是不能使用LIMIT
mysql5.1中子查詢是不能使用limit的,報錯 this version of mysql doesn t yetsupport limit in all any some subquery 這樣的語句是不能正確執行的。select from table where id in select ...
SQL資料庫查詢LIMIT 資料分頁
sql資料庫查詢limit 資料分頁 sql的語句limit 約束select 查詢資料包表時,使得sql查詢語句返回指定的記錄數 行數 limit 可以設定1個或2個int整型常量數字作為引數。limit在資料分頁查詢時候十分有用,因為不是每一次查詢都需要 select from table 這麼...