在Disk-Base数据库中,如果系统频繁地创建和更新临时表,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈。在SQL Server 2016的内存(Memory-Optimized)数据库中,如果考虑使用内存优化结构来存储临时表,表变量,表值参数的数据 ...
在Disk-Base数据库中,如果系统频繁地创建和更新临时表,大量的IO操作集中在tempdb中,tempdb很可能成为系统性能的瓶颈。在SQL Server 2016的内存(Memory-Optimized)数据库中,如果考虑使用内存优化结构来存储临时表,表变量,表值参数的数据,那么将完全消除IO操作的负载消耗,发挥大内存的优势,大幅提高数据库的性能。
在SQL Server 2016中,能够直接创建内存优化的表类型,表变量和表值参数的数据只存储在内存中;不能直接在内存中创建临时表,但是,SQL Server提供一个变通方法(Workaround),通过行级安全RLS(Row-Level-Security)控制,指定只有当前Session才能访问特定的数据,将内存优化表转换为Session级别的临时表,间接实现临时表的局部性和自动清空特性。
一,内存优化表类型(Memory-Optimized Table Type)
内存优化表类型定义的表变量,表值参数能够大幅提高效率(efficiency),有4个显著的特点:
- 数据仅存储在内存中,在读写数据时,不会产生任何的IO消耗,消除了tempdb的竞争和利用率;
- 必须有一个索引,Hash 或 Nonclustered 都行;每一个内存优化表必须创建一个索引;
- 只需要指定启用内存优化:MEMORY_OPTIMIZED = ON,只持久化Schema;
- 必须先创建表类型,后创建表值变量;
1,创建内存优化表类型
CREATE TYPE dbo.TypeTable AS TABLE ( Column1 INT NOT NULL, Column2 VARCHAR(10) NOT NULL,INDEX idxName NONCLUSTERED(Column1)) WITH(MEMORY_OPTIMIZED = ON);
海外公司注册、海外银行开户、跨境平台代入驻、VAT、EPR等知识和在线办理:https://www.xlkjsw.com
原标题:InMemory:在内存中创建临时表和表变量
关键词:内存
*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们:
admin#shaoqun.com
(#换成@)。