首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >重新组织索引阻止其他查询

重新组织索引阻止其他查询
EN

Database Administration用户
提问于 2018-09-10 09:43:12
回答 1查看 3.2K关注 0票数 0

( Server 12.0.2000.8在Azure中运行)

我的理解是,REORGANIZEing索引不应该干扰其他操作(也就是说,它不应该阻止正在进行索引重组的表上的查询,当然也不应该阻止其他表上的查询)。但是,我有一个夜间索引维护任务,它在运行时似乎阻塞了其他查询。

导致该块的查询采用以下格式:

代码语言:javascript
运行
AI代码解释
复制
ALTER INDEX [indexName] ON tableName REORGANIZE

这会导致其他查询等待,甚至是简单的查询,例如:

代码语言:javascript
运行
AI代码解释
复制
SELECT * FROM tableName WHERE indexedColumn = @value

我使用sp_who2过程查看哪些查询正在等待,哪些其他查询被阻塞。同样,正在进行索引维护的表和SELECT中的表完全无关(它们甚至在不同的模式中;正在重新组织的表在dbo中)。

正在重新组织的表有近5亿行。受影响的索引是外键使用的单个bigint列上的非聚集、非唯一索引。表本身由两个bigint列、一个tinyint列和几个小的nvarchars组成。

似乎没有什么特别之处,但我不明白为什么它会阻塞其他查询。有没有什么隐藏的依赖,我错过了?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-09-10 10:51:26

不幸的是,您的理解是一个误解,重新组织需要锁的操作。它只是没有离线重建那么严重的锁定。

因为重新组织采用X锁,所以它有阻止读取器的潜力。

这里有一个快速演示,以证明它需要锁。

代码语言:javascript
运行
AI代码解释
复制
DROP TABLE IF EXISTS dbo.whyreorg

CREATE TABLE dbo.whyreorg
(ID INT IDENTITY PRIMARY KEY, junk INT)

INSERT dbo.whyreorg
SELECT TOP 1000 FLOOR(RAND(CONVERT(VARBINARY,NEWID()))*1000)
FROM sys.all_objects a
CROSS JOIN sys.all_objects b

CREATE INDEX IX_whyreorg_this ON dbo.whyreorg (junk)

BEGIN TRAN
ALTER INDEX IX_whyreorg_this ON dbo.whyreorg REORGANIZE

SELECT *
FROM sys.dm_tran_locks
WHERE request_session_id = @@SPID

COMMIT

样本输出(为空间裁剪):

REORGANIZE不应该对其他表使用锁,所以我假设阻塞的事务依赖于正在进行重组的表。如果没有细节,就不可能证实这一点。

幸运的是,这里的解决方案很简单:停止重组。

票数 5
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/217197

复制
相关文章
SQL Server 重新组织生成索引
概述 无论何时对基础数据执行插入、更新或删除操作,SQL Server 数据库引擎都会自动维护索引。随着时间的推移,这些修改可能会导致索引中的信息分散在数据库中(含有碎片)。当索引包含的页中的逻辑排序(基于键值)与数据文件中的物理排序不匹配时,就存在碎片。碎片非常多的索引可能会降低查询性能,导致应用程序响应缓慢,所以在日常的维护工作当中就需要对索引进行检查对那些填充度很低碎片量大的索引进行重新生成或重新组织,但是在这个过程也需要注意一些小的细节,否则会产生错误。 正文 语法内容载自SQL Server联机
逸鹏
2018/04/11
2.7K0
SQL Server 重新组织生成索引
其他搜索引擎
Shodan的介绍可以说是很详细了,对于其他的空间搜索引擎,我就不再详细的去研究了,因为都是差不多的。
意大利的猫
2020/08/19
1K0
Mysql状态信息查询--其他
检测mysql server是否正常提供服务 mysqladmin -u sky -ppwd -h localhost ping
陈不成i
2021/06/15
1.7K0
MySQL索引(六)索引优化补充,分页查询、多表查询、统计查询
本文若未特意说明使用的数据表,均为 MySQL索引(四)常见的索引优化手段 中的示例表。
鳄鱼儿
2024/05/21
2620
MySQL索引(六)索引优化补充,分页查询、多表查询、统计查询
MySQL 查询索引
SELECT a.TABLE_SCHEMA, a.TABLE_NAME, a.INDEX_NAME, CASE a.NON_UNIQUE WHEN 1 THEN '非唯一' ELSE '唯一' END AS 唯一性, group_concat(COLUMN_NAME ORDER BY SEQ_IN_INDEX) AS 列, group_concat(NULLABLE ORDER BY SEQ_IN_INDEX) AS 可空,
林万程
2021/09/07
2.8K0
查询表索引
用户9857551
2023/11/11
2180
索引(index)_普通索引、唯一索引和复合索引.索引查询
索引对于优化数据库查询效率方面有着非常巨大的作用,下面是一个简单索引查询效率示例,希望能帮到一些朋友。
全栈程序员站长
2022/07/22
1.2K0
索引(index)_普通索引、唯一索引和复合索引.索引查询
MySQL查询索引分析
前一段时间修改数据表时,给一个表添加一个datetime字段,当时遇到了一个问题:我是否需要给该datetime字段上加索引呢?如果不给该字段加索引,当where语句中使用该字段时,会不会扫全表呢?如果给其加了索引,那么势必会带来一些开销,假如这个索引用不到的话,给其加了索引岂不是画蛇添足了呢?
kevindang
2018/06/17
2.3K0
MongoDB 覆盖索引查询
由于所有出现在查询中的字段是索引的一部分, MongoDB 无需在整个数据文档中检索匹配查询条件和返回使用相同索引的查询结果。
用户4988376
2021/08/13
1.1K0
MySQL查询索引原则
我们现在已经知道了如果是【主键索引】,在插入数据的时候是根据主键的顺序依次往后排列的,一个数据页不够就会分裂到另外一个数据页,然后再通过索引页来维护数据页。 参考
MickyInvQ
2023/03/11
1.1K0
MySQL查询索引原则
ES索引模糊查询
1. 准备环境 docker pull elasticsearch:6.7.0 docker pull kibana:6.7.0 docker run -it --name elasticsearch -d -p 9200:9200 -p 9300:9300 elasticsearch:6.7.0 docker run --link elasticsearch -p 5601:5601 --name kibana -d kibana:6.7.0 2. java代码 2.1 pom引入 <el
平常心
2020/10/14
3K0
ES索引模糊查询
MongoDB查询索引分析
最近几年,nosql数据库发展迅猛,mongo无疑是最闪耀的那颗明星;以前我们部门的系统,用到数据库时基本上mysql是标配;现在越来越多的项目都开始选择mongo(无论自己搭建还是使用sa的ocean);无论是mysql还是mongo,数据库是一个系统最容易出现问题、瓶颈的地方。
kevindang
2018/06/17
8.6K3
经典算法之索引查询
了解一个知识,必须先要从其含义开始。 什么是分块索引查找算法呢,分块查找是折半查找和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。 首先,所以查询需要一个索引表和一个待排序数组。索引表有当前起止索引和块区域内最大的值;
腿子代码了
2023/10/08
1940
经典算法之索引查询
使用 Styleneat 重新组织 CSS
Styleneat 是一个能够帮你重新组织你 CSS 属性的免费服务。它把 CSS 的选择器(selectors),子选择器( sub-selectors)和属性(properties)按照层式结构化重新组织,这样使得程序员更加容易去定义页面区域和查看它们之间的关系。
Denis
2023/04/14
2950
使用 Styleneat 重新组织 CSS
MySQL连接查询索引优化
首先没有使用索引,type是all,然后用了文件内排序,using filesort。这两个都是严重影响性能的,那么接下来就建索引。
贪挽懒月
2021/04/27
2.2K0
MySQL连接查询索引优化
MySQL索引和查询优化
基数是数据列所包含的不同值的数量,例如,某个数据列包含值 1、3、7、4、7、3,那么它的基数就是 4。
网络技术联盟站
2020/10/09
1.4K0
ElasticSearch索引基本查询语法[通俗易懂]
大家好,又见面了,我是你们的朋友全栈君。 #列出所有索引 GET http://127.0.0.1:9200/_cat/indices?v #删除索引 DELETE 索引名 # 条件查询 GET
全栈程序员站长
2022/11/01
4070
mysql索引提高查询速度
  在web开发中,业务模版,业务逻辑(包括缓存、连接池)和数据库这三个部分,数据库在其中负责执行SQL查询并返回查询结果,是影响网站速度最重要的性能瓶颈。本文主要针对Mysql数据库,在淘宝的去IOE(I 代表IBM的缩写,即去IBM的存储设备和小型机;O是代表Oracle的缩写,去Oracle数据库,采用Mysql和Hadoop代替;E是代表EMC2,去EMC2的设备性,用PC server代替EMC2),大量使用Mysql集群!而优化数据的重要一步就是索引的建立,对于Mysql出现的慢查询,可以用索引提升查询速度。索引用于快速找出在某个列中有一特定值的行,不使用索引,Mysql将全表扫描,从第一条记录开始,然后读完整个表直到找出相关的行。
超蛋lhy
2018/08/31
3.5K0
mysql索引提高查询速度
MySQL连接查询&索引介绍
但是MySQL执行的时候,并不是按顺序执行的,MySQL执行sql语句是从from开始执行的,上面这条语句的执行顺序是:
贪挽懒月
2021/04/12
2.5K0
Coreseek:部门查询和增量索引代替实时索引
索引系统需要通过主查询来获取所有的文档信息,一个简单的实现是整个表的数据到内存,但是这可能会导致整个表被锁定,并且使其它操作被阻止(例如:在MyISAM格款式上INSERT操作)。同时,会浪费大量的内存来存储查询结果。喜欢它的问题。 为了避免出现这样的情况。CoreSeek/Sphinx支持一种被称为 区段查询的技术. 首先,CoreSeek/Sphinx从数据库中取出文档ID的最小值和最大值。将由最大值和最小值定义自然数区间分成若干份,一次获取数据。建立索引。现举比例如以下:
全栈程序员站长
2022/07/18
3330

相似问题

重新组织索引T

20

Server重新组织索引作业

10

MariaDB: SELECT查询可以阻止其他查询吗?

20

在修改索引的同时重建和重新组织索引

10

Mysql查询正在使用其他索引。

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档