利用假期研究下SQLSERVER

2023-02-21 00:00:00 数据库 缓存 知识 写入 检查点
之前在SQL SERVER方面的知识接近于0,因为近D-SMART社区版很多用户都有SQL SERVER分析诊断的需求,因此这几天也翻了一些SQL SERVER的资料,发现SQL SERVER 虽然简单,不过整个知识体系梳理的还是很完善的,这是微软一贯的风格,也是常年积累的结果。这比一些开源数据库,特别是国产数据库要强很多,商用数据库在这方面确实有很多需要我们学习和追赶的东西。
为了让D-SMART更好地支撑SQL SERVER,编制知识图谱是十分关键的工作。而其中的一项为基础的工作就是编制各个指标的知识图谱。通过分析指标与系统运行状态的关系的分析,为每个指标设计一个基础图谱,这个图谱是用于构建每个SQL SERVER实例运行监控,智能分析,智能诊断的基础。国庆节假期琐事较少,每天早上6点半自然醒,早饭后才七点多钟,正适合学习,所以这几天我都花点时间来学习下SQL SERVER。这两天记录下来的内容,也算是我的笔记吧,毕竟年龄大了,忘性比较大。
我近学习SQL SERVER,目的并不是为了能够运维SQL SERVER,仅仅是梳理SQL SERVER的一些知识,用于知识图谱的编制。我这个年龄了,动手比较慢,敲键盘的速度也比不上年轻的DBA,英语水平更是被现在的年轻人甩了几条大街了。所以如何运维SQL SERVER,是无论如何也学不会了,就是那些系统视图和常用的分析SQL语句,恐怕都记不住了。而我是利用我这些年积累的其他数据库的一些知识与概念,快速的掌握SQL SERVER的一些内部运作原理,并找到诊断分析SQL SERVER常见故障,常见性能问题的方法。这些方法可能来自于Oracle或者PG、达梦等数据库。不同的数据库产品在实现上虽然差异较大,不过内存管理、SQL引擎、存储引擎、事务引擎这些的基本原理都十分类似,因此很多知识梳理起来,我可能会比年轻人更快一些。
不管如何,要想梳理SQL SERVER的运维知识,理解SQL SERVER中的一些基本概念,掌握SQL SERVER的体系架构依然是做这些事情的步。因此首先还是徐啊哟体系的阅读资料。而了解SQL SERVER好的知识库是微软官方的learn.microsoft.com网站。我在网上搜索了很多资料,好像没有比这个网站更权威,资料更完整的网站了。我们的国产数据库如果都能构建起这样丰富的知识库,那么国产数据库的应用会加速不少。

作为一个Oracle DBA,看到一个数据库的架构图,总是会拿Oracle与之比对,如果能够对的上,那么对于理解这些组件就容易的多。对于SQL SERVER来说,缓冲池类似于Oracle的SGA,其中比较重要的两个缓冲池为数据缓存,这个缓存类似于Oracle的DB CACHE;另外一个缓存是计划缓存,也就是Oracle的SHARED POOL中的LIBRARY CACHE。
关系引擎对应Oracle就是SQL引擎,主要是做SQL解析的。而存储引擎在Oracle中并没有十分严格的界限,SQL SERVER这部分基本上包含了Oracle的UNDO/MVCC、事务管理、锁管理、DBWRITER、LOGWRITER等组件。
SQL SERVER的脏块写盘机制比Oracle复杂,缓冲区管理器写入页面的方式有三种:LazyWrite、EgerWrite、Checkpoint。
  • LazyWrite:LazyWrite是一个系统进程,它通过从缓冲区高速缓存中删除不经常使用的页面来保持可用缓冲区可用。脏页首先写入磁盘。
  • EgerWrite:EgerWrite过程仅在部分场景下(如批量插入、INSERT SELECT等)采用一种特殊的方法写入脏数据页。此过程允许并行创建和生成新页面。也就是说,调用操作不必等到整个操作完成后再将页面写入磁盘。
  • Checkpoint:Checkpoint进程定期扫描缓冲区缓存以查找包含来自指定数据库的页面的缓冲区,并将所有脏页写入磁盘。检查点通过创建一个点来确保所有脏页都已写入磁盘,从而在以后的恢复过程中节省时间。用户可以使用 CHECKPOINT 命令请求检查点操作,或者数据库引擎可以根据使用的日志空间量和自上次检查点以来经过的时间生成自动检查点。此外,当某些活动发生时会生成一个检查点。例如,在数据库中添加或删除数据或日志文件时,或者 SQL Server 实例停止时。
LazyWrite进程负责监视数据库缓冲池与脏块的情况,定期将近期不使用的脏块写入磁盘,同时释放内存。LazyWrite还负责Windows的内存管理,当数据缓存使用量比较高,并且Windows内存不足时,LazyWrite还会通过LRU算法找到一些不用的缓存,将其释放,归还内存。当SQL SERVER负载较高的时候,如果数据缓存大小还未达到大的内存使用限制,LazyWrite还会自动增加数据缓存。基于这样的机制,在SQLSERVER上只要设置好这个阈值参数,那么SQL SERVER会自动根据系统内存与负载情况动态调整数据缓存了。前几天我们遇到的那个客户的案例,可能是这个阈值设置的过高了,导致了换页比较严重的问题。
Checkpoint的工作机制与Oracle不同,和PG数据库的行为类似,不仅仅标记检查点的位置,还负责将当前检查点需要写盘的脏数据写入磁盘。


本文来源https://www.modb.pro/db/507884

相关文章