八月份的時候 |
---|
為了要統計頁面的點擊率 |
所以AP用update 的方式來累加 |
結果在sql server 上造成了大量的lock |
從whoisactive抓到的資料如下: |
標註紅色的數字是session id |
---|
紫色的數字是被卡住的session數 |
藍色框框就是update + 1 |
當下我就問了開發人員 |
你到底什麼邏輯 |
要針對同一筆資料一直進行update作業 |
我就說你的邏輯應該有問題 |
他提出的解法就是 |
把每一次點擊 |
都以insert來處理 |
要看點擊率的話 |
就以select count(*) 來統計 |
MySQL 有其解決方案 |
---|
表格定義如下 : |
CREATE TABLE hitcount |
( |
path VARCHAR(255) |
CHARACTER SET latin1 COLLATE latin1_general_cs NOT NULL, |
hits BIGINT UNSIGNED NOT NULL, |
PRIMARY KEY (path) |
); |
其update + 1的sql 語句 |
INSERT INTO hitcount (path,hits) VALUES('some path',LAST_INSERT_ID(1)) |
ON DUPLICATE KEY UPDATE hits = LAST_INSERT_ID(hits+1); |
我在VM上測了一下 |
同時開了10個ssh console |
下了指令去看跑的狀況 |
其實我也不太肯定 |
到底是否有效 |
只能看看將來專案上有沒有機會碰到來進行驗證 |