当前位置:Gxlcms > mysql > 用示例说明表数据中出现热块&Latch的场景,并给出解决方案?

用示例说明表数据中出现热块&Latch的场景,并给出解决方案?

时间:2021-07-01 10:21:17 帮助过:29人阅读

引言:Latch争用就是由于多个会话同一时间访问同一个数据块引起的,这也是我们常说的热块。解决方法:把记录打散到多个数据块中,减少多个会话同一时间频繁访问

引言:Latch争用就是由于多个会话同一时间访问同一个数据块引起的,这也是我们常说的热块。解决方法:把记录打散到多个数据块中,网站空间,减少多个会话同一时间频繁访问一个数据块概率,防止由于记录都集中在一个数据块里产生热块现象。下面我们用实验来说明热块是如何产生和解决的。

session:19

LEO1@LEO1>select distinct sid from v$mystat; 大家先了解一下LEO1用户的SID是19

SID

-----------------

19

LEO1@LEO1>create table latch_table1 as select * from dba_objects; 创建latch_table1表

Table created.

LEO1@LEO1>select count(*) from latch_table1; 这个表中有71961条记录

COUNT(*)

----------------

71961

LEO1@LEO1>execute dbms_stats.gather_table_stats('LEO1','latch_table1'); 我们对表做一个全面分析让优化器了解表数据是如何分布的。

PL/SQL proceduresuccessfully completed.

下面我们用dbms_rowid.rowid_block_number 函数来查出一个数据块上有多少条记录

dbms_rowid.rowid_block_number作用:函数返回输入ROWID对应的数据块编号

selectdbms_rowid.rowid_block_number(rowid), count(*) block_sum_rows from latch_table1 group bydbms_rowid.rowid_block_number(rowid) order by block_sum_rows ;

这里显示出每个数据块上有多少条记录,按记录数从大到小排列

DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)BLOCK_SUM_ROWS

--------------------------------------------------

234 81

391 81

225 82

259 82

220 83

233 83

279 84

274 85

219 88

275 89

277 89

276 90

278 90

我们看到一个数据块中最多是90行记录

select'LATCH_TABLE1' , block_sum_rows , count(*) con_rows_sum_blocks from

(selectdbms_rowid.rowid_block_number(rowid), count(*) block_sum_rows from latch_table1 group bydbms_rowid.rowid_block_number(rowid) order by block_sum_rows)

group byblock_sum_rows order by con_rows_sum_blocks;

有一致记录数的数据块有多少个,举个例子好理解,上面我们看到276和278块上都用90条记录,现在我们想知道有90条记录的块一共有多少个我们用con_rows_sum_blocks列名表示(一致记录数的数据块总和),香港服务器租用,每个块上的记录数我们用block_sum_rows列名表示。

'LATCH_TABLE BLOCK_SUM_ROWS CON_ROWS_SUM_BLOCKS

-------------------------- ----------------------- -------------- -------------------

LATCH_TABLE1 85 1

LATCH_TABLE1 54 1

LATCH_TABLE1 84 1

LATCH_TABLE1 88 1

LATCH_TABLE1 25 1

LATCH_TABLE1 63 2

LATCH_TABLE1 90 2

LATCH_TABLE1 83 2

LATCH_TABLE1 82 2

LATCH_TABLE1 89 2

LATCH_TABLE1 64 4

LATCH_TABLE1 81 10

LATCH_TABLE1 80 17

LATCH_TABLE1 65 18

LATCH_TABLE1 79 20

LATCH_TABLE1 74 27

LATCH_TABLE1 73 28

LATCH_TABLE1 77 28

LATCH_TABLE1 72 29

LATCH_TABLE1 78 29

LATCH_TABLE1 75 33

LATCH_TABLE1 76 36

LATCH_TABLE1 71 54

LATCH_TABLE1 66 69

LATCH_TABLE1 70 75

LATCH_TABLE1 69 152

LATCH_TABLE1 67 158

LATCH_TABLE1 68 223

28 rows selected.

人气教程排行