無需關閉站點的情況下如何查詢ASP.NET 2.0 Membership表
這種查詢會爽快的運行在你的開發環境中:
Select * from aspnet_users where UserName = 'blabla'
或者在無需任何問題的情況下獲得一些用戶的 profile :
Select * from aspnet_profile where userID = '…...'
甚至你可以像這樣在aspnet_membership表中輕松的更新用戶的郵件地址:
Update aspnet_membership
SET Email = '[email protected]'
Where Email = '…'
但是當在你的產品服務器上有一個巨大的數據庫時,運行這些腳本都會搞垮你的服務器。理由就是, 雖然這些查詢看起來明顯是你經常使用的語句,但是這些語句沒有任何索引。因此,上面所有在"Table Scan"中的結果(很糟糕的查詢方式)都會響應數百萬行記錄。
這裡的現象對我們而言意味著什麼。我們使用了這些字段諸如UserName, Email, UserID, IsAnonymous等。關於Pageflakes的很多市場報表。這些報表中的一些僅僅市場部可以使用,其他人都不 可以使用它。現在,站點運行得很好,但是市場部一天當中會使用它很多次而且用戶常常打電話告訴我們 網站太慢了,”用戶報告網站性能十分地慢!”,一些頁面甚至還發生超時等現象。
常常,當他們打電話個給我們的時候,我們就會告訴他們“稍等,馬上檢查”,然後我們開始對整個 網站進行檢查。我們使用SQL profiler工具來查看到底那裡出錯了。但是我們不能找到任何問題。 Profiler顯示了查詢運行的摁件。CPU負載位於適當的參數范圍內。站點運行得很好,很流暢。我們打電 話給他們,“我們不能查到任何問題,到底怎麼了?”。
因此,當我們試圖調查這個問題並且在我們沒有調查時,發現站點真的變得很慢的時候,為什麼我們 不能看到它變慢的任何問題?
市場部有時候每天需要很多次運行一些分析報表來查詢數據。無論什麼時候他們執行這些查詢,當這 些字段都是不是索引時,它會使得服務器的IO吞吐量更高以及CPU的使用率增高: