如何防止大量 SELECT 阻塞其他语句?

sha*_*oth 7 performance sql-server azure-sql-database blocking query-performance

我们的 SQL Azure 数据库包含一个SELECT每天运行一次的大量语句。沉重的SELECT语句不包含锁定提示。最近我们观察到生产中的一些停顿,这sys.dm_exec_requests是那段时间显示的内容......运行时间最长的查询是SELECT具有PAGEIOLATCH_SH等待类型的繁重查询。接下来是其他查询——最常见的INSERT是具有PAGEIOLATCH_EX等待类型的语句,所有语句都运行了几十秒而不是立即完成。所以基本上,SELECT只有重才会干扰其他查询。

我该如何解决?我可以接受SELECT缓慢运行的繁重工作,但不应中断其他查询。

Pau*_*ite 8

您的主要选择是:

  1. 调整SELECT查询,使其使用更少的 I/O 资源。
  2. 在安静的时间运行查询。
  3. 在单独的数据库副本(例如可读的辅助数据库)上运行查询。
  4. 在I / O限制的资源池运行查询,这里描述*。
  5. 移动到具有更高 I/O 容量的大小/层。

旁注:这个答案没有提到使用像RCSI或 SI这样的隔离级别。这些适用于锁定阻塞,并且该问题没有提及:PAGEIOLATCH_XX等待与物理 I/O上的等待相关联。


*此功能在 Azure SQL 数据库中可能不可用。