0

製品ソフトウェアおよび製品内部で実行される次のクエリ。DBA は、このクエリが DB の CPU をより多く使用していることを発見しました。これは製品固有のクエリであるため、微調整することはできません。代替手段はありますか? テーブル内のデータの履歴/アーカイブ テーブルを作成するかどうかを検討すると、最小関数と最大関数を使用する次のクエリを利用できます。

SELECT MIN(minbkt),
   maxbkt,
   SUBSTRB(DUMP(MIN(val), 16, 0, 32), 1, 120) minval,
   SUBSTRB(DUMP(MAX(val), 16, 0, 32), 1, 120) maxval,
   SUM(rep) sumrep,
   SUM(repsq) sumrepsq,
   MAX(rep) maxrep,
   COUNT(*) bktndv,
   SUM(CASE
           WHEN rep = 1 THEN
            1
           ELSE
            0
       END) unqrep
FROM (SELECT val,
           MIN(bkt) minbkt,
           MAX(bkt) maxbkt,
           COUNT(val) rep,
           COUNT(val) * COUNT(val) repsq
      FROM (SELECT
            /*+ no_parallel(t) no_parallel_index(t) dbms_stats cursor_sharing_exact use_weak_name_resl dynamic_sampling(0) no_monitoring */
             "VERSION_LABEL" val,
             NTILE(75) OVER(ORDER BY NLSSORT("VERSION_LABEL", 'NLS_SORT = binary')) bkt
              FROM "User"."AUDITTRAIL" t
             WHERE "VERSION_LABEL" IS NOT NULL)
     GROUP BY val)
GROUP BY maxbkt
ORDER BY maxbkt
4

0 に答える 0