為什麼我還不推薦記憶體中OLTP給使用者

2021-09-07 01:48:22 字數 2218 閱讀 4798

嗯,有些人在看玩這篇文章後會恨我,但我還是要說。1個月來我在記憶體中oltp這個裡領域裡做了大量的工作,很多使用者都請求使用這個驚豔的新技術。遺憾的是,關於記憶體中oltp沒有乙個是真的令人激動的——看完你就知道了。

沒有!真的!我喜歡這個驚豔的新技術,但我還不能推薦它給任何使用者。就這樣!很有使用者現在還執行在sql server 2008(r2)上,他們就想遷移到sql server 2014上。這個驚豔新技術給他們100倍的吞吐量提公升。因此讓我們來用它吧!遺憾的是並不簡單。

很多人都問對於他們的工作量和環境,切換到sql server 2014是否有意義。基於我的建議,他們會做出持續至少5年的決定。因此這裡我有巨大的責任。我要確保不會建議不能100%融入他們環境的技術。遺憾的是記憶體中oltp不能融入99%的所有環境。

因此記憶體中oltp有問題麼,是什麼我還不能推薦它給使用者呢?我們開始分析……

當微軟首次向公眾展示記憶體中oltp時,它是很驚豔的:你切換開關,然後你的工作吞吐量就會快100倍。你只記住了立即走向右手邊的針,不是麼?但事實完全不一樣。假設你有乙個現存的資料庫,你想要移動它的一些表到記憶體中oltp。

這是不行的,因為記憶體中oltp當前不支援外來鍵(foreign keys)。非常希望你的資料庫設計有引用完整性(referential integrity)。如果不是的話,請回到資料庫基礎設計,了解下引用完整性。這已是很多使用者已經經歷的最常見中斷切換之一。他們喜歡遷移一些表到記憶體中oltp,但他們不喜歡用它來丟失他們的引用完整性……

現在假設你同意在自己的表上不使用外來鍵,你已經遷移它們到記憶體中oltp。到目前還好。在你的記憶體優化表上如何處理架構修改呢?任何alter table語句不被支援,你不能稍後建立任何額外可能需要的索引(雜湊或範圍索引)。當建立1個雜湊索引,在表建立期間,你需要指定桶數。

這意味著你需要保護你的資料增長,還有隨著時間過去你的資料如何改變。當你以後想要修改你的雜湊桶數,因為你已意識到你有大量的雜湊碰撞,你必須刪掉你的記憶體優化表,然後再次重建。同時你如何處理你的資料?你必須轉移它到另乙個表,這樣的話你不會丟失資料。這時你把資料存在**呢?使用者如果這時還要訪問這些資料怎麼辦?有很多的問題,但沒有真正有用的答案……

好,現在你用記憶體優化表很好,現在你想使用儲存過程的本地編譯功能。哇哦,現在好戲才開始!本地編譯儲存過**的,真的非常快,因為你用本地機器碼執行——c**編譯成彙編指令!太棒了!但是在查詢執行期間是沒有執行計畫的,因為你只執行匯指令,不再執行那些傳統緩慢解釋後的執行計畫。

當你執行遇到問題時,你怎麼辦?你不能看實際執行計畫來認出問題。sql server只提供你估計計畫,但估計計畫不告訴你任何真實資訊。它只是個估計,沒別的。你真的想鑽研生成的c**來找出為什麼本地編譯儲存過程這麼慢?我不這麼認為。

除了沒有實際執行計畫外,也沒有重編譯。但你的資料分布改變時,你還是用同樣編譯的執行計畫。在執行期間本地編譯儲存過程不能重編譯。我說過,在執行期間你只執行彙編指令——它們不能被重編譯。

你如何擺脫這個問題?刪除並重建你的儲存過程,因為alter procedure語句不被支援。當你刪除你的儲存過程,你也會丟失所有授予的安全許可。你真的想丟失它們?另外,你的本地編譯儲存過程必須用schemabinding建立。因此當你已經刪除儲存過程本身時,你才可以刪除你的記憶體優化表(例如,當你想修改雜湊桶數時)。偶滴神啊……

如果在sql server裡你有一些複雜cpu密集的業務邏輯,把它移到應用伺服器(例如,web伺服器),因為1個應用伺服器授權是完全不同的——非常便宜。你主要會有架構問題,沒別的。我從不在sql server內部執行業務邏輯。

哈哈,那是我計算機發展史裡最喜歡的名言之一。遺憾的是他說錯了,當你看這篇文章時,看看用的電腦硬體時就會發現。當你使用記憶體中oltp時,你需要大量的記憶體。微軟建議記憶體大小為你記憶體優化表大小的2倍,例如對於150gb大小的表,你需要300gb的記憶體。另外的記憶體用做記憶體中oltp記憶體使用的行版本控制。現在假設下,當你刪除你的表,同時你想轉移資料到另乙個記憶體優化表:在這個情況下你應該有近600gb的記憶體!準備好了麼?

人們會問我,為什麼我對這個驚豔的新技術如此否定。不是的,我並非否定,我只想告訴你事情的2面性,這樣的話你可以做出正確的決定。

記憶體中oltp是個驚豔的新技術。但目前只實現了雛形。有太多的限制剛好阻止了大量人們在生產環境中使用它。在這篇文章裡我已經概括了這些限制中的部分,這樣的話你就可以重新考慮下是否想把記憶體中oltp引入你的特定場景。

我很期待在sql server裡的下個版本再次討論這個話題,在乙個圖表裡剔除那些無關的條目,因為微軟已經移除了這些限制。這個驚豔技術還是由微軟來決定往前發展的!

感謝關注!

我為什麼推薦每日瑜伽

隨著大健康理念的興起和普及,健身運動被很多人提上了日程。不難發現,越來越多的人開始通過不同方式嘗試瑜伽這項運動,而受時間空間等客觀因素的影響,人們更願意借助手機app來練www.cppcns.com習瑜伽。但市面上有很多瑜伽教學網際網路平台,選擇哪款app作為自己健身路途中的導師成了乙個難題。對比線...

為什麼我不推薦敏捷開發?

當專案成員越多,我越不推薦敏捷開發,原因在於 當連自己要做什麼事 為什麼這樣做 這樣做為了解決什麼問題 都搞不清楚前,就跳下去玩敏捷開發,那和比通靈還慘,通靈起碼還有個目標物在前面,搞不清楚狀況的人只能陪他跳世界迷霧開地圖了 敏捷開發 mba智庫百科 最下方有段 對敏捷開發的誤解 可順便參考 敏捷軟...

為什麼大家都推薦我學Linux

最近朋友總是推薦我去學linux,我本人雖說是計算機專業的,但是我感覺在上學的時候好像還真沒學到東西,現在也是幹著乙份與計算機半毛錢關係都沒有的工作。朋友總是說linux多好,大城市對這塊的專業人員有多大的需求,何必在小城市繼續呆呢?話雖如此,但是還是有一些糾結的,今天,是我學習linux的第三個月...