oracle学习笔记

1,位图索引:通过查看一些oracle V$表(V$表是oracle提供其测量统计结果或统计信息的一种方法),可以看出,竞争主要都围绕着一个表,这是一种排队表。结论是根据V$ LOCK视图和V$ SQ

1 ,位图索引: oracleV$(V$oracle) 通过查看一些表表是提供其测量统计结果或统计信息的一种方法,可 V$LOCKV$ 以看出,竞争主要都围绕着一个表,这是一种排队表。结论是根据视图和 SQLV$LOCKV$SQL 视图做出的,视图可以显示阻塞的会话,会显示这些阻塞会话试图 SQL 执行的。应用想在这个表中放记录,而另外一组进程要从表中取出记录并进行处理。 “”PROCESSED_FLAG 通过更深入的挖掘,我们发现这个表中的列上有一个。 位图索引 PROCESSED_FLAGYN 原因在于:列只有两个值:和。对已插入表中的记录,该列值为 NNY (表示未处理)。其他进程读取和处理这个记录时,就会把该列值从更新为。这些进 PROCESSED_FLAGN 程要很快的找出列值为的记录,所以开发人员知道,应该对这个 (low-cardinality) 列建立索引。他们在别处了解到,位图索引适用于低基数列,所谓低基数就 是指这个列只有很少的可取值,所以看上去位图索引是一个很自然的选择。 不过所有问题的根由正是这个位图索引。采用位图索引,一个键指向多行,可能数以百计甚 至更多。如果更新一个位图索引键,那么这个键指向的数百条记录会与你实际更新的那一行 一同被有效锁定。 (PROCESSED_FLAGN) 所以,如果有人插入一条新记录列值为,就会锁定位图索引中的 NPROCESSED_FLAGN 键,而这回有效的同时锁定另外数百条列值为的记录。此时, NY 想要读这个表并处理记录的进程就无法将记录修改为记录。原因是,要想把这个列从 NY 更新为,需要锁定同一个位图索引键。实际上,想在这个表中插入新记录的其他会话也 会阻塞,因为他们同样想对这个位图索引键锁定。简单的讲,开发人员实现了这样一组结构, 它一次最多只允许一个人插入更新。 解决方案:处理标志列上确实需要有一个索引,但不能是位图索引。这里需要一个传统的 B*TREE 索引。 2sqlserver ,目前中有一中很普遍的做法,就是对想要执行的每条并发语句都打开一个数 5sqlserver5SQLSERVER 据库连接。如果想执行个查询,可能会在中看到个连接。就 Windowsoracle 是这样设计的,就好像是针对多线程而不是多进程设计的一样。在中,不 5500Oracle 论你想执行个查询还是个查询,都希望最多打开一个连接。就是本着这样的 SQLSERVEROracle 理念设计的。所以中常用的做法在中却不提倡;你可能并不像维护 多个数据库连接。 3OracleSQL(sharedpool) ,将已解析,已编译的连同其他内容存储在共享池中,这是系 (SystemGlobalAreaSGA) 统全局区,中一个非常重要的共享内存结构。 如果使用绑定变量,无论是谁,只要提交引用同一对象的同一个查询,都会使用共享池中已 编译的查询计划。这样你的子例程只编译一次就可以反复使用。 4 ,闩 Oracle(latching) 采用了一种闩定机制来完成串行化。

腾讯文库oracle学习笔记