SQL2014 開發者實做研討會筆記

SQL2014 開發者實做研討會筆記

今天感謝公司讓我去聽百敬老師的SQL Server 2014課程 ,課程中記了一些筆記,利用BLOG先記錄下來,內容 不全然跟SQL 2014有關(小弟不懂的都會記一下)

 

 

Page為一個LockUpdate的單位。


IndexData可以利用不同的FileGroup存放在不同的硬碟來降低硬碟IO


Hekaton資料庫重啟需花費較長的時間,因為In Memory Table要都完全載入記憶體後(Index及資料)DB才可以使用。


Update的動作是先Delete後再Insert資料。


◎傳統資料表資料搬進Memory後做Table Scan其實不會比HektonMemory Table差,Hekton會快主要是原生編譯預存程序(Native Compiler Store Procedure)的關係。


Native Compiler Store ProcedureCompiler當下執行計畫就已經確定,如需更新執行計畫就要重新Compiler Store Procedure


Linq會自動產生平行運算的語法,因為大多數的PG並不會寫Multi Thread


◎大量同時存取熱點,會因為LockLatches,就算多CPU也無用武之地。

        Lock:鎖資料邏輯,由Session決定鎖多久。

        Latches:硬體鎖,防止兩個Thread搶同一塊資源,因此會短暫鎖住硬體資源,過程很快。


◎其他廠商也有開發In Memory的產品,但都是另外的產品,需另買。


◎多CPU會因為資源爭用,導致CPU數雖然成長到6倍,但效能卻僅增加2.52倍。但如果能避開熱點則效能可以增加5倍左右。


100萬筆資料為220次方,因此以B Tree的結構來看,最多20次搜尋即可找到資料。


Hekton中建立Hash Index時須設定Bucket Count,基本上Hash Index跟資料是11最好,所以有足夠的Bucket CountTable中的資料用是最好的。例如:你資料表有100萬筆資料,而Bucket Count卻只有設定10個。此時每一個Bucket底下就包含10萬筆資料(效能非常低落),Hash Index沒有經過排序,因此如果查詢是By Range的話效能會很慘(單筆很快),B Tree的索引才適合Range查詢。


HektonIn Memory Table在記憶體滿了之後就會變成『唯讀』。


64位元系統在記憶體中的一筆Bucket8Bytes,因此一開始建立TABLE時如就設定100萬筆Bucket,那就會馬上吃掉8M Bytes的記憶體。


HektonIn Memory Table 最多支援8個索引。


SQL2014正式版In Memory Table支援Identity欄位,也支援Default


Sys.Tables新增兩個關於In Memory的欄位。


Native Compiler Store ProcedureCompiler時需指定Excute As XXXExcute As4種。OwnerSelf Calleruser_name,這4種模式中Native Compiler Store Procedure不支援Excute As Caller


TempTable可改用HektonIn Memory Table來取代,這樣就不會有硬碟IO,可是得用Native Compiler Store Procedure來增、刪、修資料。


Hekton中的Table內資料列(ROW)都是以Version來控制,因此每一筆Row會有多Version


Hash IndexBucket Count如果一開始就給1000萬筆,但TABLE的實際資料量只有100萬筆,那此時的查詢用Hash Index掃瞄跟用Table掃瞄來比的話,Table 掃瞄會快非常多,因為Hash一定要掃完1000萬筆(就算內容是空的也要掃)。


SQL Server中已有In MemoryTable存在,此時故意將SQLMax Memory縮小到無法存在該Table時,SQL Server馬上掛點。


SQL Server硬碟用完,Table也是變成唯讀。


◎記憶體不足的情況下,無法Attach Hekton的資料庫上去。


Bucket Count的筆數最好是資料筆數的2倍,因為每一筆記錄會有多Version


SQL Cluster架構的Instance要注意如果有HektonDB在的話,在FailOver時會需要相當長的時間,因為要先將HektonDB Table都載入記憶體後該Instance才能Work


Database Begin Tran後,預設是無限等待。而APConnection預設是30秒就TimeOut,因此當DB被卡住,等待30秒後AP就告知DB不要做了,放棄。


◎非同步延遲交易持久性,語法:ALTER DATABASE SET DELAYED_DURABILITY。啟用該功能後可以減少IO LDF的次數(拉長寫入LDF的時間),啟用此功能需注意萬一Instance重啟了,但還有很多資料沒進入LDF檔,此時會有資料不完整的問題存在。


Delta檔案:In Memory Table記錄已刪除的資料檔。

Data檔案:In Memory Table記錄寫入的資料檔。


Sys.fn_dblog(null,null)  ß 可以檢視LDF檔案每一筆記錄寫入的情形。


In Memory Table是先將交易寫入LDF檔,當In MemoryCheckpoint發生時,再將LDF檔案中關於In Memory Table的資料寫入DataDelta檔案中。


HektonIn Memory Table交易要Commit才會寫入到LDF檔案,且在寫入LDF時會將多筆交易集合壓縮後才做寫入,因此會降低IO(最多一筆記錄為24KB)。因為只有Commit的資料會寫入LDF,因此In Memory Table只會有ReDo的動作,不會有UnDo


SQL2014 Recovery動作步驟:

        1)分析

        2)載入Hekton

        3ReDo(傳統SQL TABLEIN MEMORY TABLE

        4UnDo(傳統SQL TABLE


◎當AlwaysOn架構有HektonTable時,注意該Table建立時需保留Schema and Data,這樣子主要複本才能根據LDF檔把In Memory Table的異動做變更。


Hekton不支援Trigger


我是ROCK

rockchang@mails.fju.edu.tw