sqlserver查看某个库所有表(SQL Server怎么找出一个表包含的页信息Page)
sqlserver查看某个库所有表
SQL Server怎么找出一个表包含的页信息Page前言
在SQL Server中,如何找到一张表或某个索引拥有那些页面(page)呢? 有时候,我们在分析和研究(例如,死锁分析)的时候还真有这样的需求,那么如何做呢? SQL Server 2012提供了一个无文档的DMF(sys.dm_db_database_page_allocations
)可以实现我们的需求,sys.dm_db_database_page_allocations
有下面几个参数:
- @DatabaseId: 数据库的ID,可以用DB_ID()函数获取某个数据库或当前数据库的ID
- @TableId: 表的ID。 我们可以使用OBJECT_ID()函数通过表名获取表ID。 这是一个可选参数,如果将其作为NULL传递,则返回与数据库中所有表的关联页面,当它为NULL时,将忽略接下来的两个参数(即@IndexId和@PartionId)值
- @IndexId: 索引的索引ID。 我们可以使用sys.indexes目录视图来获取索引ID。 它是一个可选参数,如果将其作为NULL传递,则返回所有索引关联的页面。
- @PartitionId: 分区的ID,它是一个可选参数,如果将其作为NULL传递,则返回与所有分区关联的页面.
- @Mode: 这是必填参数,有“LIMITED”或“DETAILED”两个参数。 “LIMITED”返回的信息较少。 “DETAILED”会返回详细/更多信息。显然,“DETAILED”模式会占用更多资源。
对于大表而言,如果选择“DETAILED”参数,则消耗的资源和时间非常长,这个时候非常有必要选择“LIMITED”参数。
为了更好的理解sys.dm_db_database_page_allocations
输出的数据,其实我们有必要简单了解、回顾一下SQL Server中数据存储的相关知识点。 这就涉及到页(Page)和区(Extent)的概念了。SQL Server中数据存储的基本单位是页,磁盘I/O操作在页级执行。也就是说,SQL Server读取或写入数据的最小单位就是以8 KB为单位的页。
区是管理空间的基本单位。 一个区是8个物理上连续的页的集合(64KB),所有页都存储在区中。区用来有效地管理页所有页都存储在区中。 SQL Server中有两种类型的区:
- 统一区: 由单个对象所有。区中的所有8页只能有一个对象使用。
- 混合区: 最多可由8个对象共享。区中8页中每一页都可由不同的对象所有。但是一页总是只能属于一个对象。
SQL Server中页也有很多类型,具体参考下面表格。
注意事项:有些Page Type比较少见,暂时有些资料没有补充完善
另外,关于sys.dm_db_database_page_allocations
的输出字段信息如下所示(搜索相关资料结合自己的理解,如果错误,敬请指出):
简单了解了上面知识点后,我们在使用这个DMF找出表或索引相关的页面,基本上可以读懂这些输出信息了。
USE AdventureWorks2014 GO SELECT DB_NAME(pa.database_id) AS [database_name] , OBJECT_NAME(pa.object_id) AS [table_name] , id.name AS [index_name] , pa.partition_id AS [partition_id], pa.is_allocated AS [is_allocated], pa.allocated_page_file_id AS [file_id] , pa.allocated_page_page_id AS [page_id] , pa.page_type_desc , pa.page_level , pa.previous_page_page_id AS [previous_page_id] , pa.next_page_page_id AS [next_page_id] , pa.is_mixed_page_allocation AS [is_mixed_page_allocation], pa.is_iam_page AS [is_iam_page], pa.allocation_unit_id AS [allocation_unit_id], pa.has_ghost_records AS [has_ghost_records] FROM sys.dm_db_database_page_allocations(DB_ID('AdventureWorks2014'), OBJECT_ID('TestDeadLock'), NULL, NULL, 'DETAILED') pa LEFT OUTER JOIN sys.indexes id ON id.object_id = pa.object_id AND id.index_id = pa.index_id ORDER BY page_level DESC , is_allocated DESC , previous_page_page_id;
参考资料:
https://www.sqlskills.com/blogs/paul/inside-the-storage-engine-anatomy-of-a-page/
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。
- sqlserver怎么写判断条件(SQL Server之SELECT INTO 和 INSERT INTO SELECT案例详解)
- sql server导入数据csv文件(大容量csv快速内导入sqlserver的解决方法推荐)
- sqlserver怎么加check约束(浅析SQL Server的分页方式 ISNULL与COALESCE性能比较)
- sqlserver存储删除过程(Sql中存储过程的定义、修改和删除操作)
- Windows2012配置SQLServer2014AlwaysOn的图解(Windows2012配置SQLServer2014AlwaysOn的图解)
- sqlserver函数条件判断(Sql Server 开窗函数Over的使用实例详解)
- sqlserver存储过程参数默认值(sql server使用临时存储过程实现使用参数添加文件组脚本复用)
- SQLServer将数据导出为SQL脚本
- sqlserver 存储过程(SQL Server解析XML数据的方法详解)
- SQLServer2019安装教程图文详解(SQLServer2019安装教程图文详解)
- SqlServer2016模糊匹配的三种方式及效率问题简析(SqlServer2016模糊匹配的三种方式及效率问题简析)
- sql server修改sa密码(sqlserver添加sa用户和密码的实现)
- sqlserver中根据类型分组(SQL SERVER 分组求和sql语句)
- sqlserver访问远程数据库(SQL Server实现跨库跨服务器访问的方法)
- sqlserver带参数的存储过程(SQL Server 日期和时间的内部存储过程)
- sql启动错误代码1814(SQLMSSQLSERVER服务启动错误代码3414的解决方法)
- 红色代表什么(红色代表什么意义和象征)
- 菲律宾安全吗(菲律宾安全吗2023)
- 彩礼重要吗()
- 写信告诉我今天海是什么颜色(写信告诉我今天海是什么颜色回答)
- 英语难学吗(法语比英语难学吗)
- 今天要吃什么(今天要吃什么菜好)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9