2014-02-11 53 views
3

我們有一個超過300,000,000行和兩個單列索引的表。每隔一段時間,應用程序就會受到譴責。與此同時,該表的插入語句的索引爭用較大。我也注意到了大量的緩衝區。有人可以幫我解決這個問題嗎?具有高緩衝區獲取和高索引爭用的插入語句

以下是當索引爭用較大且我們遇到性能問題時的聲明的統計信息。

     Total  Per Execution  Per Row 
Executions   51,857  1     1.00 
Elapsed Time (sec) 3,270.67  0.06    0.06 
CPU Time (sec)  1,554.41  0.03    0.03 
Buffer Gets   140,844,228 2,716.01   2,716.01 
Disk Reads   1,160   0.02    0.02 
Direct Writes  0    0.00    0.00 
Rows    51,857  1.00    1 
Fetches    0    0.00    0.00 

相同的陳述,相同的時間範圍,類似的工作量。

     Total  Per Execution  Per Row 
Executions   94,424  1    1.00 
Elapsed Time (sec) 30.41   <0.01   <0.01 
CPU Time (sec)  12.90   <0.01   <0.01 
Buffer Gets   1,130,297  11.97   11.97 
Disk Reads   469   <0.01   <0.01 
Direct Writes  0    0.00    0.00 
Rows     94,424  1.00    1 
Fetches    0    0.00    0.00 
+0

索引之一是基於序列的主鍵嗎? –

+0

是的,它是一個序列。 –

+1

這裏描述了一種可能的情況: http://sai-oracle.blogspot.ru/2009/04/beware-of-index-contention-after-mass.html但不確定這是你的情況。你有ASSM表空間嗎? –

回答

2

有看主索引兩種方式:

  1. 的方式,爲最常見的查詢
  2. 的方式來加快插入做快速查找(和posibly刪除)

大多數人認爲在第一個意義上的主索引 但是隻能有一個主鍵,因爲它的實際磁盤順序爲

由於具有序列(或時間戳)作爲主鍵,你基本上是試圖把記錄非常接近(同一頁),並可以有競爭,因爲所有刀片試圖去同一個地方

如果您使用主鍵代替分發數據,則插入衝突的次數會減少。它可以支付具有最可變屬性(最接近良好分佈)的主鍵,即使該屬性很少被查詢,實際上可以使用具有隨機值的額外列。

沒有提供有關如何使用數據的足夠信息,但可能需要交易一點查詢時間,以避免這些衝突。

+0

反向密鑰索引在這裏可能工作得很好。 –