发布网友 发布时间:2022-05-02 00:15
共3个回答
懂视网 时间:2022-05-02 04:36
对所有会话都可见。当创建临时表的会话断开数据库的联接,而且也没有活动再引用全局临时表时,SQL Server会自动删除相应的全局临时表。(2)局部临时表只对创建它的会话再创建级和调用堆栈内部级(内部的过程、函数、触发器、以及动态批处理)是可见的。当创建例程弹出调用堆栈,SQL Server就会自动删除相应的临时表
(3)表变量在tempdb数据库中也有对应的表作为其物理表示。只对当前会话的批处理可见。对调用堆栈中当前批处理的内部批处理是不可见的,对会话中随后的批处理也是不可见的。
(4)根据国外专家的经验,对于大数据,偏向使用临时表,小数据量(一般来说小于100行)则可以使用表变量。
|
是否具有统计信息 |
是否可以创建索引 |
是否是物理存储 |
临时表 |
Y |
Y |
Y |
表变量 |
N |
N |
N |
在查询过程中存储临时数据的对象,如Sorts、假脱机、Hash关联和游标等。
可以使用下面的SQL语句进行查看:
SELECT * FROM sys.dm_db_session_space_usage
查看internal_object_alloc_page_count列
开启乐观并发模式后,会使用Temp DB存放修改前的版本数据。
注意:
版本存储将会造成Temp DB的非预期增长,需要对Temp DB的文件大小及使用空间进行监控。
TempDB是系统数据库,被很多地方用到,如果配置和使用不当,空间会被迅速消耗,可能出现报错,影响服务器的正常运行。
查看TempDB的空间使用情况。
3.1.1 可以用性能监视器看下SQL server的空间使用情况。
3.1.2 用SQL语句查询空间使用情况。
(1)查看tempdb的使用情况
Exec sp_spaceused
(2)查看tempdb.mdf文件的大小
SELECT * FROM dbo.sysfiles
(3)查看tempdb的使用空间
SELECT * FROM sys.dm_db_file_space_usage
(4)查看会话的空间分配情况,不包含当前活动的任务。
SELECT * FROM sys.dm_db_session_space_usage WHERE session_id > 50
(5)查看TempDB中当前运行任务的信息。
SELECT * FROM sys.dm_db_task_space_usage WHERE session_id > 50
3.1.3 诊断TempDB磁盘问题
错误 |
引发错误的情况 |
1101 或 1105 |
任何会话都必须分配 tempdb 中的空间。 |
3959 |
版本存储区已满。此错误在日志中通常出现在错误 1105 或 1101 之后。 |
3967 |
由于 tempdb 已满,版本存储区被强制收缩。 |
3958 或 3966 |
事务在 tempdb 中找不到所需的版本记录。 |
(1)用函数sys.dm_io_virtual_file_stats查看当前实例上的TempDB上的磁盘读写情况。
SELECT DB_NAME(database_id) AS ‘Database Name‘ , file_id , io_stall_read_ms / num_of_reads AS ‘AVG Read Transfer/ms‘ , io_stall_write_ms / num_of_writes AS ‘AVG Write Transfer/ms‘ , * FROM sys.dm_io_virtual_file_stats(-1, -1) WHERE num_of_reads > 0 AND num_of_writes > 0
参考时间:10~20ms 可接受的范围。
(2)大量、频繁地创建和删除临时表及表变量
默认配置:
初始大小8M
自动增长10%,不限制增长。
这个配置可以修改,要视生产环境的情况而修改。
建议如下配置
tempdb 文件大小 |
FILEGROWTH 增量 |
0 至 100 MB |
10 MB |
100 至 200 MB |
20 MB |
200 MB 或更多 |
10%* |
一般要将TempDB的文件单独放到一个磁盘中。如果追求性能,考虑放到RAID0,但是不具有容灾性。
RAID:磁盘阵列
RAID 0 无奇偶校验的条带磁盘。数据横跨所有的物理磁盘,无任何容灾特性。
RAID 1 磁盘镜像。最少需要两个物理磁盘。可同时从两个磁盘读取数据,写数据需要备份到另外一个盘。具有容灾特性。浪费50%的磁盘空间。
RAID 5 具有奇偶校验的条带磁盘。最少需要3个物理磁盘,一个用来存放奇偶校验信息,另外两个用来存放数据,。具有容灾特性。浪费50%的磁盘空间。
RAID 10 或RIAD 0+1 组合。读写性能最好且具有容灾性。
TempDB只有一个primary文件组,所有的数据文件都会存放到这个文件组中。常规建议是4个书文件开始,并且需要进行监控,如果发现不够,可以再增加4个。依次类推。建议将文件个数控制再两位数以内。
【T-SQL性能优化】01.TempDB的使用和性能问题
标签:mod 物理 数据 死锁分析 server 阵列 操作 select page
热心网友 时间:2022-05-02 01:44
你可以手动把TEMPDB的数据大小设的大一些.在TEMPDB上点右键>属性>数据文件>分配的空间设大些.但如果你用这个临时数据库过多.可以看看你的数据库设计是不是有缺陷.热心网友 时间:2022-05-02 03:02
加大内存