本书建议“延迟持久性可能导致数据丢失,因为您可能会丢失已提交的事务。如果 SQL Server 在事务提交后崩溃,但在 60KB 缓冲区被填满之前,该事务将无法恢复,因为它丢失了。”
但是,事务在事务日志中不可用并且可以重播以进行恢复吗?
https://books.google.co.in/books?id=5Es3DwAAQBAJ&pg=PT159&lpg=PT159&dq= “数据+损耗+是具有+ + +可能延迟+耐久性” &源= BL&OTS = Mwmh4cKa6G&SIG = tctRb18itYQyBxo7lLhkT1w4-Z4&HL = EN&SA = X&VED =2ahUKEwjAyau784jeAhWHMo8KHW1XCi4Q6AEwAHoECAEQAQ#v=onepage&q="data%20loss%20is%20possible%20with%20delayed%20durability"&f=false
当插入/更新一定数量的行时,SQL Server 会自动处理索引碎片问题。
那么为什么会有重建/重组索引的选项呢?
索引在SQL Server中被存储为B树。因此,索引扫描(B 树扫描)是从根节点遍历到叶节点的过程。
当引擎被要求以未提交读模式运行查询时,它不会使用 B 树扫描。相反,它执行索引分配顺序扫描。
据我了解,索引分配映射 (IAM) 包含索引以及具有该索引数据的页面的映射。我不确定它是否按索引排序。索引分配映射 (IAM) 如何存储数据/执行索引分配扫描?
在读已提交隔离模式下,当扫描的某个点之后在前一个点发生了插入时,索引顺序扫描可能会导致丢失行。
当扫描已经读取了一条记录,该记录后来被更新并放置在距离扫描点当前到达的位置较远的位置时,就会出现重复行。
为什么索引顺序扫描不会因页面拆分而导致丢失/重复行?
链接: https: //www.brentozar.com/archive/2018/10/using-nolock-heres-how-youll-get-the-wrong-query-results/
\n文章提到了使用NOLOCK的一些问题:
\n然后修复被提到为:
\n\n\n在表上创建索引(在此特定示例中任何单字段索引都可以正常工作,为 SQL Server 提供要扫描的表的较窄副本\n)
\n
创建索引如何帮助解决 NOLOCK 问题?
\n默认情况下,SQL Server 允许最大并发连接数为 32767,这是可以同时登录 SQL Server 实例的最大用户数。
我正在开发 10 个 Web api,它们将使用自己的登录名查询 sql 服务器(因此最多 10 个登录名,加上管理员/开发人员)。预计并发登录数不超过20。
然而,每个登录 (api) 可以发出多个(也许 500 个)并发查询请求。因此,实际上 10 个 api * 500 个请求 = 5000 个并发查询请求。有时请求会较少或没有。
假设有足够的内存和磁盘 io 能力,我正在规划 cpu 要求。
据我所知,sql 请求被分配给工作线程,并且根据处理器的数量,有一定数量的默认工作线程。目前我的开发机器有 24 个处理器,因此默认的最大工作线程是 832。
假设查询可能超出线程占用成本(40),这意味着 SQL Server 可能决定使用并行性(最大 dop)。
假设 MAX DOP = 1,则一次可以处理 832 个请求。
假设 MAX DOP = 4,则一次可以处理 208 个请求。
超出此范围的任何查询请求都必须等待,直到为其分配工作线程。
那么,为了确保能够满足 5000 个请求的峰值负载,估计我至少需要大约 145 个 cpu 是否正确?
((145-4)*32)+512 = 5024
当离线索引重建正在运行时,并且会触发 CRUD 查询(假设重建需要几个小时)。
查询将等待重建完成多久?
假设重建仍在运行,一旦完成等待,它会做什么?
通常 sp_execute sql 将重用缓存的计划,其中 EXEC 将为每个参数创建新计划。
在此示例中,两个查询都使用 sp_executesql - 第二个查询导致计划缓存中的计划数量较少的原因是什么?
查询1:
查询2:
我正在决定是在 Azure VM 上安装 SQL Server 还是配置托管实例。
据我了解,托管实例不支持以下功能:
SSIS
SSAS
SSRS
Manual patching
Full OS control
Run Code Online (Sandbox Code Playgroud)
还有其他托管实例不支持 azure vm 上的 sql server 将支持的内容吗?例如:
Transactional replication
Always On availability groups
Log shipping
MDS
DQS
Run Code Online (Sandbox Code Playgroud) 从页面预期寿命开始,它应该远高于 300。这告诉您页面在缓冲池中停留的时间,值 300 相当于 5 分钟。如果您有 120GB 的缓冲池,并且其运行时间超过 5 分钟,则相当于系统持续的磁盘 I/O 速度为 409.6 MB/秒,这是必须维持的大量磁盘活动。
链接: https: //deltabravo.ai/delta-bravo-performance-counters-sql-server-target-vs-total-memory/
使用的公式好像是->磁盘IO吞吐量=缓冲池内存*1024/PLE
这是确定磁盘 IO 吞吐量的正确方法吗?