SQL Server DBA日常检查常用SQL

SQL Server DBA日常检查常用SQL

作为SQL Server数据库管理员(DBA),日常检查是确保数据库运行稳定和高效的重要任务之一,以下是一些常用的SQL语句,可以帮助DBA进行日常检查和维护工作。

SQL Server DBA日常检查常用SQL

1、检查数据库空间使用情况

可以使用以下SQL语句来检查数据库的空间使用情况:

SELECT 
    DB_NAME(database_id) AS DatabaseName,
    CAST(SUM(size) * 8.0 / 1024 / 1024 AS DECIMAL(18, 2)) AS TotalSizeMB,
    CAST(SUM(FILEPROPERTY(name, 'SpaceUsed') * 8.0 / 1024 / 1024) AS DECIMAL(18, 2)) AS UsedSizeMB,
    CAST(SUM(FILEPROPERTY(name, 'SpaceFree') * 8.0 / 1024 / 1024) AS DECIMAL(18, 2)) AS FreeSizeMB,
    CAST((SUM(FILEPROPERTY(name, 'SpaceUsed')) * 100.0 / SUM(size)) AS DECIMAL(18, 2)) AS SpaceUsagePercentage
FROM 
    sys.master_files
GROUP BY 
    database_id;

这个查询将返回每个数据库的名称、总大小、已使用大小、剩余大小以及空间使用百分比,通过定期运行此查询,DBA可以及时发现数据库空间不足的问题,并采取相应的措施,如增加数据文件或优化表结构。

SQL Server DBA日常检查常用SQL

2、检查索引碎片情况

索引碎片是指索引中的页不再按照顺序排列,这会导致查询性能下降,可以使用以下SQL语句来检查索引碎片情况:

SELECT 
    OBJECT_NAME(object_id) AS TableName,
    index_id,
    partition_number,
    avg_page_space_used_in_percent,
    page_count,
    record_count,
    forwarded_record_count,
    minimum_record_size_in_bytes,
    maximum_record_size_in_bytes,
    avg_record_size_in_bytes,
    forwarded_record_count * 8.0 / page_count AS forwarded_records_pct,
    page_count * 8.0 / 1024 AS pages_mb,
    record_count * 8.0 / page_count AS records_per_page,
    record_count * 8.0 / (page_count * 1.0) AS records_mb,
    avg_page_space_used_in_percent * page_count * 8.0 / 1024 AS used_pages_mb,
    CASE WHEN indexproperty(object_id('tempdb..tmp'), 'IsClustered', 'IsSinglePart') = 1 THEN 'CLUSTERED' ELSE 'NONCLUSTERED' END AS indextype,
    avg_page_space_used_in_percent > 30 AS fragmented
FROM 
    sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') AS iptrs;

这个查询将返回每个表的索引名称、分区号、平均页使用百分比、页数、记录数、前向记录数、最小记录大小、最大记录大小、平均记录大小、前向记录百分比、页数(MB)、每页记录数、每页记录(MB)、已使用的页数(MB)以及是否碎片,通过定期运行此查询,DBA可以发现索引碎片问题,并采取相应的措施,如重建索引或重新组织表。

SQL Server DBA日常检查常用SQL

3、检查锁和死锁情况

锁和死锁是数据库中常见的问题,可以使用以下SQL语句来检查锁和死锁情况:

-检查当前会话的锁和阻塞情况
SELECT 
    tl.request_session_id AS SPID,
    tl.resource_database_id AS DBID,
    tl.resource_type AS LockType,
    tl.resource_description AS LockDescription,
    tl.request_mode AS LockMode,
    tl.request_status AS LockStatus,
    tl.request_owner_type AS LockOwnerType,
    tl.request_owner_id AS LockOwnerID,
    tl.request_owner AS LockOwnerSID,
    tl.requesting_session_id AS BlockingSPID,
    tl.blocking_session_id AS BlockingSessionID,
    tl.waittime AS LockWaitTimeMS,
    tl.getdate() AS LockTimestamp,
    tl.objtype AS LockObjectType,
    tl.objname AS LockObjectName,
    tl.objid AS LockObjectID,
    tl.trancount AS LockTransactionCount,
    tl.isupdate as IsUpdateLock,
    tl.islock as IsExclusiveLock,
    tl.hasexpl as HasExplicitLocks,
    tlp.query as LockQueryText,
    qp.queryplan as LockQueryPlanText,
    qp.queryhash as LockQueryHashValue,
    qp.statementtext as LockStatementText,
    qp.statementoption as LockStatementOptionText,
    qp.statementcompatibility as LockStatementCompatibilityLevelText,
    qp.compileoption as LockCompileOptionText,
    qp.compiletype as LockCompileTypeText,
    qp.plangenerationnum as LockPlanGenerationNumText,
    qp.planhandle as LockPlanHandleText,
    qp.relop as LockRelopText,
    qp.operator as LockOperatorText,
    qp.predicate as LockPredicateText,
    qp.table as LockTableText,
    qp.function as LockFunctionText,
    qp.module as LockModuleText,
    qp.returns as LockReturnsText,
    qp.parameter as LockParameterText,
    qp.systemtype as LockSystemTypeText,
    qp.language as LockLanguageText,
    qp.unicodeasn as LockUnicodeAsnText,
    qp.collation as CollationText, -for SQL Server 2005 and later versions only!
    qp.referencingcolumnasn as RefColumnAsnText -for SQL Server 2005 and later versions only!
FROM sys.dm_tran_locks l INNER JOIN sys.dm_exec_sessions e ON l.requesting_session_id = e.session_id CROSS APPLY sys.dm_exec_sqltext(e.sql_handle) tlp INNER JOIN sys.dm_exec_queryplan qp ON l.plan_handle = qp.plan_handle; -for SQL Server 2005 and later versions only! -where l.requesting_session_id = @@SPID; -uncomment this line to filter by current session only! -order by l.requesting

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/355359.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-03-09 22:20
Next 2024-03-09 22:30

相关推荐

  • 谈谈Tempdb对SQL Server性能优化有何影响

    Tempdb是SQL Server中的一个临时数据库,用于存储所有的临时表、临时存储过程、临时触发器等,在SQL Server中,Tempdb对性能优化有着重要的影响,本文将从以下几个方面谈谈Tempdb对SQL Server性能优化的影响。1、Tempdb的大小和配置Tempdb的大小和配置直接影响到SQL Server的性能,如果……

    2024-03-04
    0198
  • mysql数据库发展

    随着互联网的高速发展,数据量呈现爆炸式增长,传统的关系型数据库已经无法满足现代应用的需求,为了解决这一问题,MySQL推出了Yang新一代数据库技术,本文将探讨Yang新一代数据库技术的未来趋势。1、分布式架构Yang新一代数据库采用了分布式架构,将数据分布在多个节点上,实现了数据的高可用性和可扩展性,在分布式架构下,用户可以根据自身……

    2024-03-27
    0164
  • mysql中explain用法详解

    在MySQL中,EXPLAIN是一个非常重要的命令,它用于分析SQL查询语句的执行计划,通过EXPLAIN,我们可以了解MySQL如何执行特定的SQL语句,从而找出性能瓶颈,优化查询速度。基础语法使用EXPLAIN的基本语法很简单,只需要在你想要分析的SQL语句前加上EXPLAIN关键字即可:EXPLAIN SELECT * FROM……

    2024-02-02
    0199
  • 高效管理你的服务器资源:MySQL服务器资源管理器 (服务器资源管理器 mysql)

    MySQL服务器资源管理器是一个工具,旨在帮助管理员高效地管理和监控MySQL服务器资源,确保系统性能和稳定性。

    2024-03-18
    0162
  • mssqlserver免费版

    免费MSSQL服务器:高效稳定的数据存储解决方案在当今数据驱动的时代,拥有一个高效且稳定的数据库系统对于企业和个人来说至关重要,微软的 SQL Server(MSSQL)是一个广泛使用的数据库管理系统,它提供了丰富的功能和强大的性能,虽然SQL Server的完整版本是商业产品,但微软同样提供了免费的版本,即 SQL Server E……

    2024-04-03
    0154
  • 浅析SQL Server的聚焦使用索引和查询执行计划

    在数据库管理系统中,索引和查询执行计划是两个非常重要的概念,它们对于提高数据库的性能和效率起着至关重要的作用,本文将深入探讨SQL Server中的聚焦使用索引和查询执行计划。索引索引是数据库中用于快速查找数据的数据结构,它可以大大提高查询的速度,但是也会增加插入、删除和更新操作的开销,如何合理地使用索引,是数据库优化的重要课题。1、……

    2024-03-02
    092

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入