मैं SQL 2005 प्रोफाइलर का उपयोग करके कुछ परीक्षण कर रहा हूं।क्वेरी तेजी से चलती है, लेकिन संग्रहित प्रक्रिया में धीमी गति से चलती है
मेरे पास एक संग्रहीत प्रक्रिया है जो केवल एक SQL क्वेरी चलाती है।
जब मैं संग्रहीत प्रक्रिया चलाता हूं, तो इसमें काफी समय लगता है और 800,000 डिस्क पढ़ता है।
जब मैं संग्रहीत प्रक्रिया से अलग एक ही क्वेरी चलाता हूं, तो यह 14,000 डिस्क पढ़ता है।
मुझे पता चला कि यदि मैं OPTION (recompile) के साथ एक ही क्वेरी चलाता हूं, तो इसमें 800,000 डिस्क पढ़ने लगते हैं।
इससे, मैं (संभावित रूप से गलत) धारणा करता हूं कि संग्रहीत प्रक्रिया हर बार फिर से संकलित होती है, और इससे समस्या आती है।
क्या कोई इस पर कुछ प्रकाश डाल सकता है?
मैंने ARITHABORT चालू किया है। (यह stackoverflow पर एक ऐसी ही समस्या हल हो, लेकिन मेरा समाधान नहीं)
यहाँ पूरे संग्रहीत प्रक्रिया है:
DECLARE
@Contract_ID INT,
@dt_From smalldatetime,
@dt_To smalldatetime,
@Last_Run_Date datetime,
@rv int
SET @Contract_ID=38
SET @dt_From='2010-09-01'
SET @dt_To='2010-10-01'
SET @Last_Run_Date='2010-10-08 10:59:59:070'
-- This takes over fifteen seconds
exec GET_IF_SETTLEMENT_ADJUSTMENT_REQUIRED @[email protected]_ID,@[email protected]_From,@[email protected]_To,@[email protected]_Run_Date
-- This takes less than one second!
SELECT @rv = (CASE WHEN EXISTS
(
select * from
view_contract_version_last_volume_update
inner join contract_version
on contract_version.contract_version_id = view_contract_version_last_volume_update.contract_version_id
where [email protected]_ID
and volume_date >= @dt_From
and volume_date < @dt_To
and last_write_date > @Last_Run_Date
)
THEN 1 else 0 end)
-- With recompile option. Takes 15 seconds again!
SELECT @rv = (CASE WHEN EXISTS
(
select * from
view_contract_version_last_volume_update
inner join contract_version
on contract_version.contract_version_id = view_contract_version_last_volume_update.contract_version_id
where [email protected]_ID
and volume_date >= @dt_From
and volume_date < @dt_To
and last_write_date > @Last_Run_Date
)
THEN 1 else 0 end) OPTION(recompile)
दो "वास्तविक क्वेरी निष्पादन योजना" के बीच क्या अंतर है? – Andomar