Tuning /Troubleshooting

Database optimization typically involves the following aspects:

Database architecture tuning(Oracle DataGuard,Oracle RAC,Extend RAC,GDS,MySQL Master-slave,MySQL MGR etc)

Database parameter tuning(include Operating system kernel parameters)

Database SQL tuning(SQL Plan \SQL query rewrite etc)

The following is an example of Oracle SQL optimization. Through optimization, the performance is improved by tens of times.

SELECT NVL(SUM(NVL(GJL.ENTERED_DR, 0) - NVL(GJL.ENTERED_CR, 0)), 0)
  FROM GL_JE_HEADERS xx1, GL_JE_LINES xx2, GL_CODE_COMBINATIONS xx3
 WHERE xx1.JE_HEADER_ID = xx2.JE_HEADER_ID
  AND xx1.CODE_COMBINATION_ID = xx3.CODE_COMBINATION_ID
  AND xx1.CODE_COMBINATION_ID = :B6
  AND ((:B5 = 'GL' AND xx1.JE_SOURCE NOT IN
      ('Assets', 'Inventory', 'Payables', 'Receivables')) OR :B5 = 'ALL')
  AND xx3.LEDGER_ID = :B4
  AND xx2.SEGMENT1 = :B3
  AND xx1.CURRENCY_CODE = :B2
  AND xx1.PERIOD_NAME = :B1;

after change :

SELECT /*+ leading(xx2) use_nl(xx3) use_nl(xx1) */NVL(SUM(NVL(xx3.ENTERED_DR,
0) - NVL(xx3.ENTERED_CR, 0)), 0)
  FROM GL_JE_HEADERS xx1, GL_JE_LINES xx2, GL_CODE_COMBINATIONS xx3
 WHERE xx1.JE_HEADER_ID = xx2.JE_HEADER_ID
  AND xx1.CODE_COMBINATION_ID = xx3.CODE_COMBINATION_ID
  AND x11.CODE_COMBINATION_ID = 598217
  AND (('ALL' = 'GL' AND GJH.JE_SOURCE NOT IN
      ('Assets', 'Inventory', 'Payables', 'Receivables')) OR 'ALL' = 'ALL')
  AND xx3.LEDGER_ID = 2021
  AND xx2.SEGMENT1 = '1651'
  AND xx1.CURRENCY_CODE = 'CNY'
  AND xx1.PERIOD_NAME = '2020-04';

By adjusting the execution plan order, Buffer gets  is reduced by 50 times!

The execution time of a customer’s stored procedure is shortened from 350s to 30s after  rewrite 。

with mmt as
(
SELECT /*+ parallel(mmt,8)*/
 202208271800 as k,MMT.*
  FROM XXMA_MTL_MATERIAL_TRANSACTIONS MMT
 WHERE 1 = 1
   AND (xxx.TRANSACTION_SOURCE_TYPE_ID IN (3, 6, 100, 101, 102, 103) OR
       xxx.TRANSACTION_TYPE_ID IN (244) OR
       xxx.TRANSACTION_TYPE_ID IN
       (SELECT MTT.TRANSACTION_TYPE_ID
           FROM FND_LOOKUP_VALUES_VL FLV, MTL_TRANSACTION_TYPES MTT
          WHERE FLV.LOOKUP_TYPE = 'XXMA_EXP_INV_TRANSACTION_TYPE'
            AND FLV.ENABLED_FLAG = 'Y'
            AND FLV.MEANING = MTT.TRANSACTION_TYPE_NAME))
   AND xxx.DISTRIBUTION_ACCOUNT_ID IS NOT NULL
   AND xxx.TRANSACTION_DATE BETWEEN
       TRUNC( /*:B1*/to_date('07/01/2022 00:00:00', 'mm/dd/yyyy hh24:mi:ss')) AND
       (TRUNC( /*:B6*/to_date('07/31/2022 23:59:59',
                      'mm/dd/yyyy hh24:mi:ss')) + 0.999988)
   AND (xxx.OWNING_TP_TYPE = 2 OR xxx.OWNING_TP_TYPE IS NULL)
   AND (xxx.LOGICAL_TRANSACTION = 2 OR xxx.LOGICAL_TRANSACTION IS NULL)
   AND EXISTS
 (SELECT NULL
          FROM XXMA_MTL_SECONDARY_INVENTORIES MSI
         WHERE bbb.ORGANIZATION_ID = xxx.ORGANIZATION_ID
           AND bbb.SECONDARY_INVENTORY_NAME = xxx.SUBINVENTORY_CODE
           AND bbb.ASSET_INVENTORY = 1
           AND bbb.SECONDARY_INVENTORY_NAME NOT LIKE '%INTRAN')
   AND NOT EXISTS
 (SELECT NULL
          FROM FND_LOOKUP_VALUES_VL FL, ORG_ORGANIZATION_DEFINITIONS OOD
         WHERE FL.LOOKUP_TYPE = 'XXMA_SUBINVENTORY_EXCEPTION'
           AND FL.TAG = OOD.ORGANIZATION_CODE
           AND FL.LOOKUP_CODE = xxx.SUBINVENTORY_CODE
           AND FL.ENABLED_FLAG = 'Y')
  AND ROWNUM >= 1
  ),
  xxx2 as 
  (
  select ATTRIBUTE1,XXMA_CST_WIP_EXP_ALLOCATE_PKG.GET_SHOW_FLAG(PN_CCID      => NULL,
                                                    PV_DEPT_CODE => xxx.ATTRIBUTE1,
                                                    PV_BU        => NULL,
                                                    PV_BU_TYPE   => /*:B5*/ 'RESTORE',
                                                    PV_REST_TYPE => /*:B4*/ 3,
                                                    PV_BU_CODE   => /*:B3*/ 'HKBU12400',
                                                    PV_BG_KBU    => /*:B2*/ 'KBU12400',
                                                    PD_DATE      => /*:B1*/ to_date('07/01/2022 00:00:00',
                                                                                    'mm/dd/yyyy hh24:mi:ss')) as GET_SHOW_FLAG
                                                                                    from
  (
  select ATTRIBUTE1 from xxx group by ATTRIBUTE1
  )xxx
  )
  select xxx.* from xxx
  left join xxx2 on xxx2.ATTRIBUTE1 = xxx.ATTRIBUTE1
   WHERE (EXISTS
        (SELECT 'exists'
           FROM XXMA_CST_PROCESSING_ORGS
          WHERE PROCESSING_ID = /*:B7*/
                654121
            AND ORGANIZATION_ID = xxx.ORGANIZATION_ID) OR
       xxx2.GET_SHOW_FLAG = 'Y')