一條慢SQL導(dǎo)致購物車服務(wù)無法使用的解決方案
概述
之前處理過一個購物車故障,覺得還挺經(jīng)典的,在這里跟大家分享一下。這個故障直接導(dǎo)致前端添加購物車、獲取用戶購物車列表等操作都失敗了。購物車是入口,一旦出現(xiàn)問題,影響極其嚴(yán)重。
臨時處理
購物車服務(wù)所有接口,是有打印響應(yīng)時間的,發(fā)現(xiàn)比平時慢了很多。由于情況已是十萬火急了,我只能先重啟購物車,緩沖一下,然后利用這段緩沖時間,趕緊定位問題。
問題定位
之前對購物車應(yīng)用基于Spring Cloud
微服務(wù)化了,已經(jīng)穩(wěn)定運(yùn)行了幾個月了,且當(dāng)時上線前也經(jīng)過壓測,接口性能是沒問題的。怎么突然之間就有問題了呢?根據(jù)以往的經(jīng)驗(yàn),大部分故障都是SQL
語句引起的,因此首先導(dǎo)出數(shù)據(jù)庫的所有慢SQL
(騰訊云有導(dǎo)出慢SQL的工具)語句,發(fā)現(xiàn)大部分慢查詢都是來自庫存查詢的SQL
語句,有些甚至是10秒鐘才執(zhí)行完。
后來仔細(xì)一看,庫存慢查詢語句,要查詢庫存的商品比平時多很多。商品個數(shù)少的話,這條語句還是非常快的,一旦多了就開始慢了。
解決方案
由于庫存計算體系的歷史原因,這條SQL
是很難優(yōu)化的。情況又是十萬火急的,大老板一直在問咋回事。因此臨時改代碼,將商品庫存放到Redis
緩存起來。購物車服務(wù)的話,是允許庫存數(shù)據(jù)不實(shí)時的,因?yàn)楹竺娴慕Y(jié)算和支付會實(shí)時計算庫存,庫存不足的時候,會提示用戶的。
注意:
- 由于購物車是入口,流量很大,而從購物車到結(jié)算頁再到支付,由于有一個操作步驟,因此結(jié)算頁和支付頁的流量是沒有購物車那么大的;
- 部分用戶購物車上的商品數(shù)據(jù)是非常多的,但是未必都會買,用戶也可以勾選要買的商品,然后下單;
- 部分用戶沒有清理購物車失效商品的習(xí)慣,導(dǎo)致購物車上的商品非常多。
終極解決方案
將庫存服務(wù)獨(dú)立出去,將商品庫存數(shù)據(jù)放置到緩存,并引入實(shí)時刷新緩存中庫存數(shù)據(jù)的機(jī)制,讓緩存中的數(shù)據(jù)盡量保證新鮮。這樣的話,查詢庫存的時候,大部分都可以從緩存中獲取,不會穿透到數(shù)據(jù)庫上。
補(bǔ)充
我們對接口進(jìn)行壓測的時候,部分場景下,要考慮入?yún)⒌膫€數(shù),不能簡單的用幾個數(shù)據(jù)壓測,覺得性能OK就不管了。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對腳本之家的支持。如果你想了解更多相關(guān)內(nèi)容請查看下面相關(guān)鏈接
相關(guān)文章
數(shù)據(jù)庫中的左連接(left join)和右連接(right join)區(qū)別
關(guān)于左連接和右連接總結(jié)性的一句話,左連接 where只影向右表,右連接where只影響左表2012-06-06SQL服務(wù)器面臨的危險和補(bǔ)救.讀[十種方法]后感.
SQL服務(wù)器面臨的危險. 危險:沒有防火墻保護(hù),暴露在公網(wǎng)中. 后果:SQL蠕蟲感染和黑客進(jìn)行拒絕服務(wù)攻擊、緩存溢出、SQL盲注和其它攻擊. 補(bǔ)救:安裝一款防火墻,即使經(jīng)費(fèi)有限,網(wǎng)上也有大把的免費(fèi)產(chǎn)品.2008-05-05在windows系統(tǒng)下如何安裝memcached的講解
今天小編就為大家分享一篇關(guān)于在windows系統(tǒng)下如何安裝memcached的講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03建立在Tablestore的Wifi設(shè)備監(jiān)管系統(tǒng)架構(gòu)實(shí)現(xiàn)
一般大公司會有許多園區(qū),園區(qū)內(nèi)會有不同部門的同事在一起辦公。每個園區(qū)內(nèi)都要配備大量的Wifi設(shè)備從而為園區(qū)同事提供方便的上網(wǎng)服務(wù)。因此,集團(tuán)需要一套完善的監(jiān)管系統(tǒng)維護(hù)所有的Wifi設(shè)備。需要的朋友來一起學(xué)習(xí)下吧2019-05-05基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫
這篇文章主要介紹了基于navicat連接登錄windows10本地wsl數(shù)據(jù)庫,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-11-11最新統(tǒng)計排名前十的SQL和NoSQL數(shù)據(jù)庫排行榜
這篇文章主要介紹了最新統(tǒng)計排名前十的SQL和NoSQL數(shù)據(jù)庫排行榜,本文包括Oracle、MySQL、Microsoft SQL Server、PostgreSQL、MongoDB等數(shù)據(jù)庫,需要的朋友可以參考下2014-09-09利用Navicat Premium導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)信息至Excel的方法
這篇文章主要介紹了利用Navicat Premium導(dǎo)出數(shù)據(jù)庫表結(jié)構(gòu)信息至Excel的方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-03-03