我目前正在嘗試執行關於許可的一些SAP分析。我想通過他們擁有的角色將用戶鏈接到交易,並根據他們的交易獲取所需的許可證。此分析跨多個SAP服務器執行,每個服務器包含多個SAP實例。在這個分析的某一點上,由於查詢永遠不會結束(我運行了更多的10個小時(儘管我有128 GB的RAM和大CPU性能),但我仍然在使用大型表和查詢優化。有關這些表我根據我的查詢:SQL Server大型表查詢優化
- SAP_LICENSING.DBO.calc_2_USER_ROLES其中包含100萬行,並通過那些列定義:DTT_ID(SAP服務器名稱),MANDT(SAP實例名稱),UNAME(用戶名) ,ASSIGNED_ROLE(他分配給的角色,例如:accoutant)。該表存儲分配給用戶的角色
- SAP_LICENSING.DBO.raw_AGR_1251其中包含2M (SAP服務器名稱),MANDT(SAP實例名稱),AGR_NAME(角色),LOW(事務範圍開始),HIGH(事務範圍結束)
- SAP_LICENSING.DBO.param_LICENSING_RULES包含140K行,並且由這些列定義:
- SAP_LICENSING.DBO:TRANSAC(事務),LICENSE(對於相關的交易所需的許可證)
我已經設置在每個這些表的聚簇索引。 calc_2_USER_ROLES:DTT_ID,MANDT,UNAME,ASSIGNED_ROLE上的索引
- SAP_LICENSING.DBO.raw_AGR_1251:指數上DTT_ID,MANDT,AGR_NAME,低,高
- SAP_LICENSING.DBO.param_LICENSING_RULES:指數上TRANSAC
這裏是我的響應時間,在每個子查詢中的選擇:
- 關於UR別名子查詢:30秒
- 關於第t別名子查詢:2分鐘30秒
- 關於LR別名子查詢:5秒
請注意以下幾點:
- 運行此查詢時,我看到的10%的CPU和RAM的30%,最大使用量
- 的查詢工作迅速在SAP服務器的一個子集(1個SAP服務器名稱過濾器)
- 第二子查詢來變換SAP交易範圍與同一個JOIN BETWEEN關鍵字
- 的LEFT JOIN的使用,因爲我想保持無與倫比的交易進行進一步的分析兼容搜索交易
這是我與掙扎的相關查詢:
INSERT INTO SAP_LICENSING.DBO.calc_3_USER_ROLES_TRANSACTIONS
SELECT UR.DTT_ID,UR.MANDT,UR.UNAME,UR.ASSIGNED_ROLE,
TRANSAC_FROM,TRANSAC_TO,SAP_TRANSAC_RANGE,LR.TRANSAC,LR.LICENSE
--Get User Role Assignments
FROM
(
SELECT DISTINCT UR.DTT_ID,UR.MANDT,UR.UNAME,UR.ASSIGNED_ROLE
FROM SAP_LICENSING.DBO.calc_2_USER_ROLES UR
)UR
--Join on transactions and Convert SAP Transaction ranges into SQL searchable ranges
JOIN
(
SELECT T.DTT_ID,T.MANDT,T.AGR_NAME,T.AUTH,
replace(replace(T.LOW,'*',' '),'$',' ') AS TRANSAC_FROM,
replace(replace(coalesce(T.HIGH,T.LOW),'*',left('ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ',41-len(coalesce(T.HIGH,T.LOW)))),'$','Z') AS TRANSAC_TO,
CONCAT(T.LOW,' TO ', isnull(T.HIGH,'')) as SAP_TRANSAC_RANGE
FROM SAP_LICENSING.DBO.raw_AGR_1251 T
)T
ON UR.ASSIGNED_ROLE=T.AGR_NAME and UR.MANDT=T.MANDT and UR.DTT_ID=T.DTT_ID
--Join on transactions requiring a license
LEFT JOIN SAP_LICENSING.DBO.param_LICENSING_RULES LR
ON LR.TRANSAC between T.TRANSAC_FROM and T.TRANSAC_TO;
非常感謝任何幫助你能給。 最簡單方面
當發佈需要調整的查詢時,只有當您發佈最少的repro以供其他人測試時纔是好的(可以是可以回答的)。這裏是一個很好的例子,生成表格模式,其他人的統計數據可以複製。看看我的問題DBA.SE獲取更多信息:http://dba.stackexchange.com/questions/157353/wrapping-query-in-if-exists-makes-it-very-slow – TheGameiswar