SQLSERVER 2005技术内幕:查询、调整和优化笔记(1)

本文深入探讨了SQL Server数据库性能优化与监控的关键技术,包括检查数据库一致性、监控内存使用、跟踪阻塞任务、优化SQL语句、检测工作负载等。通过分析SQL Server的工作进程、查询计划和执行统计信息,提供了提升性能和资源利用效率的有效策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

dbcc 数据库控制台命令

 --检查数据库一致性

dbcc checkdb



--监控内存使用情况
dbcc memorystatus



--跟踪当前被阻塞的任务
select * from sys.dm_os_waiting_tasks



--采用粒度较小的锁如行锁则会增加对资源的消耗
--采用较为粗糙的锁如表锁则可能导致较为严重的阻塞
--sql语句尽量使用谓词,避免全表扫描

--检测可运行状态下的工作进行数量
select COUNT(*) as workers_wating_for_cpu, t2.scheduler_id
from sys.dm_os_workers as t1, sys.dm_os_schedulers t2
where t1.state = 'runnable'  and t1.scheduler_address = t2.scheduler_address
and t2.scheduler_id < 255
group by t2.scheduler_id




--工作进程在可运行状态下话费的时间
select SUM(signal_wait_time_ms)
from sys.dm_os_wait_stats 




--查询每次执行中占用cpu最多的前十位查询,也列出sql语句的查询计划以及这个计划被执行的次数
--显示当前北环村的查询合计统计信息
select top 10 total_worker_time / execution_count as avg_cpu_cost, plan_handle, execution_count,
(
    select SUBSTRING(text, statement_start_offset/2 + 1,
        (
            case when statement_end_offset = -1 then len(convert(nvarchar(max), text)) * 2
            else statement_end_offset end - statement_start_offset
        ) / 2
    )
    from sys.dm_exec_sql_text(sql_handle)
) as query_text
from sys.dm_exec_query_stats
order by avg_cpu_cost DESC



--找出工作负荷中运行最频繁的查询
select top 10 total_worker_time, plan_handle, execution_count,
(
    select SUBSTRING
    (
        text,
        statement_start_offset/2 + 1,
        (
            case when statement_end_offset = -1 then LEN(convert(nvarchar(max),text)) * 2
            else statement_end_offset
            end - statement_start_offset
        )/2
    )
    from sys.dm_exec_sql_text(sql_handle)
)as query_text
from sys.dm_exec_query_stats
order  by execution_count desc 




--sql server在优化查询计划上话费的时间
select *
from sys.dm_exec_query_optimizer_info
where counter = 'optimizations' or counter = 'elapsed time'



--查询被编译得最多的前十位的查询计划
select top 10 plan_generation_num, execution_count,
(
    select SUBSTRING(
        TEXT,
        statement_start_offset/2 + 1,
        (
            case when statement_end_offset = -1
            then len(convert(nvarchar(max), text)) * 2
            else statement_end_offset
            end - statement_start_offset  
        )    / 2
    )
    from sys.dm_exec_sql_text(sql_handle)
)as query_text
from sys.dm_exec_query_stats
where plan_generation_num > 1
order by plan_generation_num desc


--查询缓冲池消耗的内存总量
select SUM
        (
            multi_pages_kb + virtual_memory_committed_kb + shared_memory_committed_kb +awe_allocated_kb
        ) as [used by bpool, kb]
from sys.dm_os_memory_clerks
where type = 'memoryclerk_sqlbufferpool'




--查询哪些内部部件窃取缓冲区池中大部分的页面
select  top 10 TYPE,
SUM(single_pages_kb) as stolen_mem_kb
from sys.dm_os_memory_clerks
group by TYPE
order by SUM(single_pages_kb) desc





--查询多页分配器来确认在缓冲区池外分配内存的内部组件
SELECT TYPE, SUM(multi_pages_kb) as memory_allocated_KB
FROM sys.dm_os_memory_clerks
WHERE multi_pages_kb != 0
group by type 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值