sqlserver 构架与性能优化
太阳底下没有新鲜事
一、sqlserver 构架结构
1、查询优化器三阶段
1)、找计划缓存如果找到直接使用
2)、简单语句生成0开销的执行计划
3)、正式优化 一般情况下优化到开销小于1.0就会停止
定义…
Select * from sys.dm_os_memory_cache_entries where type=’cachestore_phdr’
2、写入数据页
1)、惰性写入器(定期检验缓冲区的邻居l领进临界值,如果过小就会去检验很久么有的缓存(老化页)直接干掉,脏页写入到硬盘,然后把这个内存空间标注为空闲)
2)、Checkpoint 检验点进程只把脏页面写入到数据页,如果断电重启会从日志文件读取恢复
3)、内存配置的依据
select count(*)*8/1024 as 'Buffer cached size(MB)'
, case database_id when 32767 THEN 'ResourceDb' else db_name(database_id)
end AS 'Database'
from sys.dm_os_buffer_descriptors group by db_name(database_id), database_id
order by 'Buffer cached size(MB)' desc
二、日志 备份和恢复
- 有序的文件事务日志(事务提交九写了事务日至)
描述记录包括 发生改变 数据页 和页 码。 增加或删除的数据,已经这些改变所属的事务 信息,还有事务的起止日期和时间信息
2、事务日志的数据恢复
在最后一个检查点之后发生的数据将被用作恢复
ldf ,
问题: 事务日志一直不断增长采取办法
恢复模式
简单,完整,大容量日志
1、 完整模式只有做了事务日志才会截断
2、 可以改成简单模式直接截断(强烈不建议使用)简单恢复模式只要checkpoint就会截断
3、 搜索
全备
差异备份
事务日志备份
三、深入理解索引
Mssql 只有一种索引模式 B-Tree 模式
1、 非聚集索引
2、 聚集索索引
动作描述 |
使用聚集索引 |
使用非聚集索引 |
列经常被分组排序 |
应 |
应 |
返回某范围内的数据 |
应 |
不应 |
一个或极少不同值 |
不应 |
不应 |
小数目的不同值 |
应 |
不应 |
大数目的不同值 |
不应 |
应 |
频繁更新的列 |
不应 |
应 |
外键列 |
应 |
应 |
主键列 |
应 |
应 |
频繁修改索引列 |
不应 |
应 |
SELECT * FROM dbo.PCE_Admin_Info WHERE Admin_Account='admina' AND Admin_Id = 1
四、优化工具使用
1、 执行计划-- EXPLAIN
2、 查询优化顾问
3、 活动监视器
4、 Sql 分析器
索引查找 和索引扫描
USE db_30014
SELECT * FROM dbo.PCE_Site_Mobile_Region_Bind
SELECT * FROM dbo.PCE_Site_Mobile_Region_Bind WHERE Bind_MobileNo >1000
缓存体现
SELECT * FROM dbo.PCE_Site_Mobile_Region_Bind WHERE Bind_MobileNo >1900000
SELECT * FROM dbo.PCE_Site_Mobile_Region_Bind