1. 程式人生 > >Exadata遷移到雙節點RAC效能下降

Exadata遷移到雙節點RAC效能下降

背景:某個資料抽取系統(OLAP)一個跑批儲存過程在老環境(40分鐘)遷到 新環境(140分鐘)

老環境是一體機,新環境是雙節點RAC.其實不算是遷移,可以看作倆系統同時存在 一條SQL分別在兩個系統上跑,效能差異很大

SQL語句如下:
INSERT INTO inct_all  
SELECT POST_DATE,
……
……
BY3 
FROM INCT_ALL_T I
LEFT JOIN REP_NETJRNL_428 R 
ON R.SEQUENCE_NO=I.SEQUENCE_NO_EFTM;

1.為什麼會變慢?

 猜想是因為統計資訊過期導致的SQL執行計劃變了

2.如何驗證我們猜想?

使用以下SQL查詢SQL的歷史執行計劃
SQL> SELECT * FROM DBA_HIST_SQL_PLAN WHERE SQL_ID ='1612mq5nyjcuh';

      DBID SQL_ID        PLAN_HASH_VALUE        ID OPERATION                      OPTIONS              OBJECT_NAME        OBJECT_ALIAS        
---------- ------------- --------------- ---------- ------------------------------ --------------- ------------- ------------------------------
1049186783 1612mq5nyjcuh      2807630616          0 INSERT STATEMENT                                                                          
1049186783 1612mq5nyjcuh      2807630616          1 LOAD TABLE CONVENTIONAL                                                                    
1049186783 1612mq5nyjcuh      2807630616          2 HASH JOIN                      RIGHT OUTER                                                
1049186783 1612mq5nyjcuh      2807630616          3 TABLE ACCESS                  FULL                REP_NETJRNL_428    
[email protected]
$1 1049186783 1612mq5nyjcuh 2807630616 4 TABLE ACCESS FULL INCT_ALL_T [email protected]$2

3.執行計劃沒有變的情況下  應該從哪幾個方向入手去查?

使用以下SQL查詢問題SQL的等待事件資訊
SQL> SELECT EVENT,COUNT(1) FROM DBA_HIST_ACTIVE_SESS_HISTORY A
  2  WHERE TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS')>='2018-03-21 04:06:51'
  3  AND TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS')<='2018-03-21 06:25:03'
  4  AND SQL_ID='1612mq5nyjcuh'
  5  GROUP BY EVENT ORDER BY 2 DESC;

EVENT                                                              COUNT(1)
---------------------------------------------------------------- ----------
db file sequential read                                                 502
                                                                        244
gc current grant 2-way                                                  49
gc current request                                                        3
log file switch completion                                                1
gc current multi block request                                            1

6 rows selected

4.全表掃描為什麼會出單塊讀(db file sequential read ),哪幾種情況下會出現這種情況?

    1)讀undo

    2)維護索引

    3)行連結、行遷移(如果是這樣db file sequential read 的比例應該非常小)

    所以 需要定位等待事件發生在哪個object上面(undo file 還是 index file)

5.怎麼查詢等待事件發生在哪個object上面?

SQL> SELECT SQL_ID, P1,P2,P3,P1TEXT,P2TEXT,P3TEXT FROM DBA_HIST_ACTIVE_SESS_HISTORY A
  2  WHERE TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS')>='2018-03-21 04:06:51'
  3  AND TO_CHAR(SAMPLE_TIME,'YYYY-MM-DD HH24:MI:SS')<='2018-03-21 06:25:03'
  4  AND SQL_ID='1612mq5nyjcuh'
  5  AND EVENT ='db file sequential read';
SQL_ID                P1        P2        P3 P1TEXT      P2TEXT        P3TEXT
------------- ---------- ---------- ---------- ------------ ------------- ---------
1612mq5nyjcuh      1622    2112160          1 file#        block#        blocks
1612mq5nyjcuh        312    2632329          1 file#        block#        blocks
1612mq5nyjcuh        271    3688861          1 file#        block#        blocks
1612mq5nyjcuh        299    2735754          1 file#        block#        blocks
1612mq5nyjcuh        279    4059154          1 file#        block#        blocks
1612mq5nyjcuh        308    4054881          1 file#        block#        blocks
1612mq5nyjcuh        340    2609359          1 file#        block#        blocks
1612mq5nyjcuh      1627    558361          1 file#        block#        blocks
1612mq5nyjcuh        287    2595376          1 file#        block#        blocks
1612mq5nyjcuh      1631    489405          1 file#        block#        blocks
1612mq5nyjcuh        283    2650425          1 file#        block#        blocks
1612mq5nyjcuh      1633    733414          1 file#        block#        blocks
1612mq5nyjcuh        327    2662011          1 file#        block#        blocks
1612mq5nyjcuh        284    2560285          1 file#        block#        blocks
1612mq5nyjcuh      1620    2063611          1 file#        block#        blocks
1612mq5nyjcuh        528    1547673          1 file#        block#        blocks
1612mq5nyjcuh        292    2659311          1 file#        block#        blocks
1612mq5nyjcuh        277    4019727          1 file#        block#        blocks
1612mq5nyjcuh        303    2707764          1 file#        block#        blocks
1612mq5nyjcuh        368    144874          1 file#        blocks
...
...
...
^ 502 ROWS
SELECT * FROM DBA_EXTENTS WHERE FILE_ID=1622 AND 2112160 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS; 

OWNER  SEGMENT_NAME  PARTITION_NAME  SEGMENT_TYPE      TABLESPACE_NAME  EXTENT_ID    FILE_ID  BLOCK_ID      BYTES    BLOCKS RELATIVE_FNO
------- ------------- ---------------- ------------------ ---------------- ---------- ---------- ---------- ---------- ---------- ------------
REPORT  IDX_INCT_ALL  INCT_ALL_6050    INDEX PARTITION    INDX                    108      1622    2112064    8388608        256          599

可以看出等待事件發生在index file上面

查一下inct_all表的索引資訊:

REPORT    IDX_INCT_ALL                        Normal    ACCT_NO, TRAN_CODE                    N        N    Y    

REPORT    INCT_ALL_PARUK_02            Unique    POST_DATE, ACCT_NO, REC_NO    N        N    N    

REPORT    INCT_ALL_PAR_IDX2             Normal    POST_DATE, ACCT_NO, JRNL_NO   N        N    N    

REPORT    LOC_INCT_ALL_PAR_IDX1    Normal    POST_DATE, ACCT_NO                     N        N    Y 

索引設計不合理,相當冗餘

6.解決問題:刪除冗餘的索引 (以 POST_DATE開頭的組合索引 只留一個)

查詢索引的使用頻率
SQL> SELECT OBJECT_NAME, COUNT(1)
  2    FROM DBA_HIST_SQL_PLAN
  3  WHERE OPERATION LIKE '%INDEX%'
  4    AND OBJECT_NAME IN ('IDX_INCT_ALL',
  5                        'INCT_ALL_PARUK_02',
  6                        'INCT_ALL_PAR_IDX2',
  7                        'LOC_INCT_ALL_PAR_IDX1')
  8  GROUP BY OBJECT_NAME
  9  ORDER BY 2 DESC;

OBJECT_NAME                      COUNT(1)
------------------------------- ----------
INCT_ALL_PARUK_02                      387
LOC_INCT_ALL_PAR_IDX1                  70
IDX_INCT_ALL                           8
INCT_ALL_PAR_IDX2                      5

所以DROP兩個冗餘的LOC_INCT_ALL_PAR_IDX1 和 INCT_ALL_PAR_IDX2 索引即可

7.難道老環境上面不需要維護索引?

 1) 查詢老環境發現表INCT_ALL 上面只有兩個索引(新環境是有開發人員發現有SQL慢私自建了兩個索引)

 2) Exadata 維護索引的時候使用flash cache執行效率很高

相關推薦

Exadata遷移節點RAC效能下降

背景:某個資料抽取系統(OLAP)一個跑批儲存過程在老環境(40分鐘)遷到 新環境(140分鐘) 老環境是一體機,新環境是雙節點RAC.其實不算是遷移,可以看作倆系統同時存在 一條SQL分別在兩個系統上跑,效能差異很大 SQL語句如下: INSERT INTO inct_

RAC節點RAC搭建

本文主要是雙節點的RAC進行搭建,根據黃偉老師的視訊進行總結和使用。 搭建環境: 1.兩臺安裝好Linux_x64系統的伺服器 2.IP設定 注意:Priv-IP的IP是自己一個網段,而剩下的S

oracle exadata celldisk 快閃記憶體盤受損導致效能下降

2018年12月7日早上接應用反饋oracle 一體機上的業務無法正常運轉,系統超卡;由於一體機中跑著好幾個11g的例項,全部例項的業務都反映很慢,速進行硬體方面的檢視。 檢視oracle資料庫告警日誌以及asm告警日誌發現數據磁碟都有在資料同步的動作,並且alter日誌中發現有壞塊;再進一步通

讓天下沒有難用的資料庫 » 一次資料庫上雲遷移效能下降的排查

背景介紹: 某客戶目前正在將本地的業務系統遷移上雲,測試過程中發現後臺運營系統,在rds上執行時間明顯要比線下PC上自建資料庫執行時間要慢1倍,導致客戶系統割接延期的風險。使用者線下一臺PC伺服器的效能居然還比頂配的RDS跑的快,這讓使用者對RDS的效能產生了質疑,需要立刻調查原因。 問題分析: 通

正式生產庫,配置節點RAC + 單例項的 DATAGUARD

正式生產庫,配置DATAGUARD RAC+單例項DATAGUARD  配置 RAC 兩節點: 192.1.0.101    rac1     192.1.0.102    rac2 儲存:ASM DB_UNIQUE_NAME= racdb 例項:racdb1; racdb

Oracle遷移到MySQL性能下降的註意點(轉)

class acl 技術 table 劃分 hash join 重要 發生 rst 背景:最近有較多的客戶系統由原來由Oracle改造到MySQL後出現了性能問題CPU 100%,或是後臺的CRM系統復雜SQL在業務高峰的時候出現堆積導致業務故障。在我的記憶裏面淘寶最初從O

2、spring cloud服務註冊中心eureka—節點配置(第一章)

叢集 註冊中心這麼關鍵的服務,如果是單點話,遇到故障就是毀滅性的。在一個分散式系統中,服務註冊中心是最重要的基礎部分,理應隨時處於可以提供服務的狀態。為了維持其可用性,使用叢集是很好的解決方案。Eureka通過互相註冊的方式來實現高可用的部署,所以我們只需要將Eureke Server配

OpenStack節點部署—M aodh(報警服務)

aodh安裝 一、資料庫配置 二、建立服務憑證和API端點 三、安裝並配置aodh服務 四、驗證ceilometer服務 一、資料庫配置 # mysql -uroot -p123456 MariaDB [(

OpenStack節點部署—M ceilometer(監測服務)

ceilometeran安裝 一、安裝、配置並使用mongodb 資料庫 二、建立服務憑證和API端點 三、安裝並配置監測服務 1.安裝並配置ceilometer 2.啟用影象服務表 3.啟用計算服務表

OpenStack節點部署—M Manila(共享檔案系統服務)

Manila安裝 一、資料庫配置 二、建立服務憑證和API端點 三、安裝並配置Heat 四、啟動服務並設定開機自啟 一、資料庫配置 Controller節點 # mysql -uroot

OpenStack節點部署—M Heat(編配服務)

Heat安裝 一、資料庫配置 二、建立服務憑證和API端點 三、安裝並配置Heat 四、驗證操作 一、資料庫配置 Controller節點 # mysql -uroot -p123456

OpenStack節點部署—M Swift(物件儲存服務)

Swift安裝 一、 環境配置 二、控制節點安裝並配置Swift 三、儲存節點安裝並配置Swift 四、建立並分發Ring 五、完成安裝 六、驗證swift操作 一、 環境配置 Co

OpenStack節點部署—M Cinder(塊儲存服務)

Cinder安裝 一、 資料庫配置 二、 建立服務憑證和API端點 三、 安裝並配置Cinder元件 四、安裝配置儲存節點 五、驗證Cinder服務 一、 資料庫配置 Controller節

Linux 檢視節點是否做了SSH信任

perl $AD_TOP/patch/115/bin/txkRunSSHSetup.pl verifyssh -contextfile=$CONTEXT_FILE -hosts=erpapp1,erpapp2 \-invalidnodefile=/tmp/verifyssh.log  &nbs

Linux 查看節點是否做了SSH信任

pat ont apps con new 查看 -i 是否 linux perl $AD_TOP/patch/115/bin/txkRunSSHSetup.pl verifyssh -contextfile=$CONTEXT_FILE -hosts=erpapp1,erpa

部署節點openstack私有云

Controller: 1、修改主機名 vi /etc/sysconfig/network 使主機名生效: hostname controller&&bash 2、新增主機名與ip地址對映 vi /etc/hosts 測試下是否對映成功:

RAC效能分析 - gc buffer busy acquire 等待事件

  概述---------------------gc buffer busy是RAC資料庫中常見的等待事件,11g開始gc buffer  busy分為gc b

OpenStack節點部署—M Trove(資料庫服務)

Trove安裝 一、資料庫配置 二、建立服務憑證和API端點 1.安裝Trove相關包 2.修改相關配置檔案 3.同步資料庫 4.啟動trove服務並設定開機自啟 三、驗證操作,並建立

Kafka 資料遷移(增加節點和減少節點均適用)

當Kafka 減少Broker節點後,需要把資料分割槽遷移到其他節點上,以下將介紹我的一次遷移驗證過程。 前3步為環境準備,實際資料操作看第4步即可 增加Broker節點,也可以採用步驟4相同的方法進行重新分割槽 方案思想:使用kafka-reassign-partitions命令,

學習eureka註冊中心節點 總結的相關知識點

首先新建eureka專案,在這裡就不詳細敘述了。在搭建框架的時候,由於對之前的知識點模模糊糊,重新又複習了一遍。 在看pom檔案的時候有好多地方知識盲區不清楚,今天搞清楚記錄一下。 pom 檔案中經常建的屬性就不說了,下來說一說不經常見的 <dependencyM