如何在创建索引的时候不造成锁表最终导至长事务
2015-01-08 10:39
239 查看
http://blog.sina.com.cn/s/blog_8a2f64890100xhmm.html
http://blog.sina.com.cn/s/blog_58e5258901013jvw.html
11.5以后版本支持
CREATE INDEX i1 ON tab1(c1) ONLINE
CREATE INDEX ONLINE 和 DROP
INDEX ONLINE
现在可以以非独占的方式创建和删除索引。可以使用
在索引创建期间,如果索引创建时带
如果索引是带
使用
可以立即创建索引,不必在表上放置锁。
在创建索引的同时可以对表进行更新。
优化器可以更新未被锁的表中的统计信息,从而可以获得更佳的查询计划。
可以使用
read)时才适用。索引创建时在表上放置一个独占锁,并等待所有其他扫描表的、使用索引分区的并发进程结束,然后才创建附属索引。如果这个表正在被读取或更新,则
如果
注意: 在索引创建之后,当引擎更新系统编目信息时,它会短时间地放置一个锁。
下面的清单 5 提供了带
清单 5. 带 ONLINE 关键字的 CREATE INDEX 示例
ONLIDX_MAXMEM
ONLINE 语法)的表列上完成其他操作,那儿这可能有用。
这个配置参数可以用
DROP INDEX ONLINE
使用
可以直接删除低效的索引,而不会干扰正在运行的查询,即使有查询在使用那个索引也仍然可以删除它。
查询优化器将被通知不要将那个索引用于表上的新的 SELECT 操作。
清单 6 包含带 ONLINE 语法使用 DROP INDEX 的例子:
清单 6. 带 ONLINE 语法使用 DROP INDEX 的示例
http://blog.sina.com.cn/s/blog_58e5258901013jvw.html
11.5以后版本支持
CREATE INDEX i1 ON tab1(c1) ONLINE
CREATE INDEX ONLINE 和 DROP
INDEX ONLINE
现在可以以非独占的方式创建和删除索引。可以使用
CREATE INDEX ONLINE和
DROP INDEX ONLINE语法在联机或者动态环境中创建和删除索引。数据库和它的相关表不会被独占地锁住,所以可以被更新或读取。
在索引创建期间,如果索引创建时带
ONLINE关键字,则不需要在表上放置独占锁。可以在表上进行读取和更新。索引的创建不必等到可以在表上放置独占锁。
如果索引是带
ONLINE关键字创建的,则数据库服务器用一个特定的标志记录操作。现在,恢复操作将检查那个标志,并且可以重新创建索引。
使用
CREATE INDEX ONLINE语句创建索引的优点有:
可以立即创建索引,不必在表上放置锁。
在创建索引的同时可以对表进行更新。
优化器可以更新未被锁的表中的统计信息,从而可以获得更佳的查询计划。
可以使用
CREATE INDEX ONLINE语法创建附属索引,但是
ONLINE语法只在事务隔离级别为脏读(dirty
read)时才适用。索引创建时在表上放置一个独占锁,并等待所有其他扫描表的、使用索引分区的并发进程结束,然后才创建附属索引。如果这个表正在被读取或更新,则
CREATE INDEX ONLINE语句等待独占锁。
如果
LOCK MODE没有被设为
WAIT,则附属索引的创建可能失败,因为它不会等待其他用户完成。
注意: 在索引创建之后,当引擎更新系统编目信息时,它会短时间地放置一个锁。
下面的清单 5 提供了带
ONLINE关键字使用
CREATE INDEX的语法:
清单 5. 带 ONLINE 关键字的 CREATE INDEX 示例
CREATE INDEX i1 ON tab1(c1) ONLINE |
ONLIDX_MAXMEM配置参数用于限制分配给原像日志池或更新日志池的内存大小。这些池是用
ONLINE关键字创建索引时在共享内存中创建的。如果您计划在被索引(使用
ONLINE 语法)的表列上完成其他操作,那儿这可能有用。
ONLIDX_MAXMEM的取值范围是 16KB 到 4294967295。在 onconfig.std 中的默认大小是 5120。
这个配置参数可以用
onmode -wf动态地修改或者用
onmode -wm命令取代。
DROP INDEX ONLINE
DROP INDEX ONLINE允许删除索引,而不需要独占锁。即使在事务隔离级别为脏读时也可以删除索引(利用
ONLINE关键字)。
使用
DROP INDEX ONLINE语句删除索引的优点有:
可以直接删除低效的索引,而不会干扰正在运行的查询,即使有查询在使用那个索引也仍然可以删除它。
查询优化器将被通知不要将那个索引用于表上的新的 SELECT 操作。
DROP INDEX ONLINE在表更新完成之后才执行。发出
DROP INDEX ONLINE语句之后,新的操作不能引用该索引,但是当前的操作可以使用该索引,直到操作完成。数据库服务器等到所有当前用户访问完索引之后才删除索引。
清单 6 包含带 ONLINE 语法使用 DROP INDEX 的例子:
清单 6. 带 ONLINE 语法使用 DROP INDEX 的示例
DROP INDEX i1 ONLINE |
相关文章推荐
- SQL Server如何识别真实和自动创建的索引
- 如何识别真实和自动创建的索引?
- 如何创建唯一索引
- mssql:t-sql;创建表;给表添加约束;使用变量;事务,索引,视图;存储过程;触发器trigger
- 如何创建高性能的索引
- 如何创建oracle函数索引
- 创建数据库、表、主外键、各种约束、存储过程、视图、索引、事务使用、触发器、创建登录账号、数据库用户 Sql语句示例
- 如何创建效率高sql-建立索引
- mssql:t-sql;创建表;给表添加约束;使用变量;事务,索引,视图;存储过程
- 如何允许在程序运行的时候删除用CFileDialog打开的dialog中创建的文件夹。
- castle 1.0 RC1 中使用“自动事务”facility后,并发较大的情况下,造成创建proxy失败
- 如何创建合适的索引
- Oracle中重建索引时如何解决“无法为表空间 XXXXXX 中的段创建INITIAL区”错误
- ORACLE下如何获得全部的索引创建语句
- 如何创建高性能的索引
- SQL Server如何识别真实和自动创建的索引
- [Oracle]如何在亿级记录表中创建索引(转)
- 使用to_date创建函数索引的时候经常会遇到ORA-01743错误
- 如何在视图上创建索引
- 如何创建唯一索引 (Visual Database Tools)