在Disk-Base數(shù)據(jù)庫中,由于臨時(shí)表和表變量的數(shù)據(jù)存儲(chǔ)在tempdb中,如果系統(tǒng)頻繁地創(chuàng)建和更新臨時(shí)表和表變量,大量的IO操作集中在tempdb中,tempdb很可能成為系統(tǒng)性能的瓶頸。在SQL Server 2016的內(nèi)存(Memory-Optimized)數(shù)據(jù)庫中,如果考慮使用內(nèi)存優(yōu)化結(jié)構(gòu)來存儲(chǔ)臨時(shí)表,表變量,表值參數(shù)的數(shù)據(jù),那么將完全消除IO操作的負(fù)載消耗,發(fā)揮大內(nèi)存的優(yōu)勢,大幅提高數(shù)據(jù)庫的性能。
在SQL Server 2016中,能夠直接創(chuàng)建內(nèi)存優(yōu)化的表類型,表變量和表值參數(shù)的數(shù)據(jù)只存儲(chǔ)在內(nèi)存中;不能直接在內(nèi)存中創(chuàng)建臨時(shí)表,但是,SQL Server提供一個(gè)變通方法(Workaround),通過行級(jí)安全RLS(Row-Level-Security)控制,指定只有當(dāng)前Session才能訪問特定的數(shù)據(jù),將內(nèi)存優(yōu)化表轉(zhuǎn)換為Session級(jí)別的臨時(shí)表,間接實(shí)現(xiàn)臨時(shí)表的局部性和自動(dòng)清空特性。
一,內(nèi)存優(yōu)化表類型(Memory-Optimized Table Type)
內(nèi)存優(yōu)化表類型定義的表變量,表值參數(shù)能夠大幅提高效率(efficiency),有4個(gè)顯著的特點(diǎn):
數(shù)據(jù)僅存儲(chǔ)在內(nèi)存中,在讀寫數(shù)據(jù)時(shí),不會(huì)產(chǎn)生任何的IO消耗,消除了tempdb的競爭和利用率;
必須有一個(gè)索引,Hash 或 Nonclustered 都行;每一個(gè)內(nèi)存優(yōu)化表必須創(chuàng)建一個(gè)索引;
只需要指定啟用內(nèi)存優(yōu)化:MEMORY_OPTIMIZED = ON,只持久化Schema;
必須先創(chuàng)建表類型,后創(chuàng)建表值變量;
1,創(chuàng)建內(nèi)存優(yōu)化表類型
網(wǎng)友評(píng)論