近期接到乙個需求,因併發訪問單張表導致時延過大,需要拆成10張表,對於objid模10來訪問對應的表。
因涉及併發及statement快取,將原單個字串sql語句擴充套件為長度為10的字串陣列,將單個statement快取擴充套件為長度為10的statement快取陣列。
增加開關判斷,true時走分表邏輯,false時走原邏輯。
原始**為
int funcname(long objid,...)
修改為
int funcname(long objid,...)
else
int iret = getpreparedstatement(*stmttmp, psqlstr);
......
}
開關關閉時效能和修改前持平,開啟時下降明顯。
效能下降嚴重,各種分析、求助無果。
總是有一種感覺,是mod帶來的效能下降,於是改為與運算。
重新測試,效能和開關關閉時持平,達到預期效果。
從指令數分析,取模運算和與運算也僅差乙個指令,這點差異對應幾百萬指令簡直是九牛一毛,
但是效果卻有如此大的差異,至於具體原因,苦思無果,難道觸發了蝴蝶效應。。。
領導們和se們都很懷疑,看到結果也只能事實勝於雄辯了。
const long spilit_and_operation_base_num = 7;
int funcname(long objid,...)
else
int iret = getpreparedstatement(*stmttmp, psqlstr);
......
}
或許可以作為效能優化點,對於2的n次方的取模運算,可以改為2的n次方-1的與運算。 為何回憶如此撩人
今晚聽著 多年以後 感慨良多,為何會有如此傷感令人回憶的故事?不同的年齡段 同一段相同的故事情節,會有不同的反應。相信80後90後的讀者朋友應該會深有體會吧?像上海灘1980版,射鵰英雄傳1983版,神鵰俠侶06版,天龍八部03版。這一類神一樣的存在,至少在我的心中,你再複製,也無非影響它們在我心中...
我們為何如此設計
在這裡 我無意引入太多諸如優雅,華麗 繁複之類的概念 或者說形容詞 我希望謹 慎的運用能夠幫助讀者意識到它們所代表的重要性和真正含義。就我所知 無論對於大公司還是小公司 又或者擁有多麼強悍技術力量的個人 設計都 是不可迴避的話題 如果有人說 無設計 也是一種設計 相信我 他一定在說謊 也許你曾聽到過...
Linux之路為何如此艱難?
在本文中,所謂 linux 之路 是指通向完美 linux 桌面的道路。談起 linux 桌面,有人不屑一顧,嗤之以鼻。實際情況如何?11 月29日,mint 8 一種比較完美的 linux 桌面 正式發布,在我們國內反響不大。我國 linux 發展之落伍,我國 linux 觀念之怪異,由此可見一斑...