Quantcast
Channel: SQL Server Database Engine forum
Viewing all articles
Browse latest Browse all 15264

Performance Issue Using T4199 or T4126

$
0
0

Hi, we migrated a database from a SQL Server 2008 server (production) to a SQL Server 2008 R2 server (test - version 10.50.4000).  The test server has the trace flag 4199 enabled.  The original production server does not use the trace flag.  One of the queries (with a complicated ON clause) became very slow.  As soon as I removed the trace flag and restarted, the query is fast again. 

With T4199: (takes 30 seconds)

Table 'complaint_data'. Scan count 12296800, logical reads 39196050, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'enhancement'. Scan count 4, logical reads 101956, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'charging_language_segment'. Scan count 9, logical reads 38, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'charge_filed'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'defendant'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Without T4199: (takes less than second)

Table 'Worktable'. Scan count 0, logical reads 0, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'complaint_data'. Scan count 80, logical reads 320, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'charging_language_segment'. Scan count 9, logical reads 38, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'enhancement'. Scan count 3, logical reads 33, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'charge_filed'. Scan count 1, logical reads 3, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

Table 'defendant'. Scan count 1, logical reads 2, physical reads 0, read-ahead reads 0, lob logical reads 0, lob physical reads 0, lob read-ahead reads 0.

I did update the usage and statistics, but it made no difference.   I removed the T4199 flag from startup.  I was able to use DBCC TRACEON one at a time, usinghttp://support.microsoft.com/kb/974006, and isolate the issue to trace flag 4126 (http://support.microsoft.com/kb/959013).  I had to use "OPTION(RECOMPILE)" to insure I was getting a new plan each test.  This flag does not seem to have anything to do with this query.  I don't see any local publications or subscriptions. 

Here's the query.  (Yes, that's an ugly ON clause.  This is ancient code.  I did create a version that optimizes with or without the trace flag, but we have a lot of other code to worry about.  A developer just happened to notice this issue on this query.) 

DECLARE @case_sid int
SET @case_sid = 132970
SELECT COUNT(DISTINCT CAST(e.enhancement_number AS VARCHAR(10)) + CAST(c.segment_number AS VARCHAR(10)))
FROM charging_language_segment c
INNER JOIN enhancement e
ON c.offense_sid = e.offense_sid
	AND c.segment_type IN ('CITY', 'CNTY', 'CRTN', 'CRTP', 'FARM', 'JNDR', 
		'NAME', 'NAR', 'SEL', 'ST', 'VHCL', 'WPN')
	AND e.charge_sid IN (
		SELECT charge_sid 
		FROM charge_filed 
		WHERE defendant_sid IN (
			SELECT defendant_sid 
			FROM defendant 
			WHERE case_sid = @case_sid
			)
		)
	AND 'E' + CAST(e.enhancement_number as varchar(9)) + '_' + CAST(c.segment_number AS VARCHAR(9)) 
		NOT IN
		  (SELECT DISTINCT cd.count_number + '_' + CAST(cd.segment_number AS VARCHAR(9)) 
		  FROM complaint_data cd
		  INNER JOIN enhancement e2
		  ON cd.count_number = 'E' + CAST(e2.enhancement_number AS VARCHAR(9))
			  AND cd.case_sid = @case_sid
			  AND cd.complaint_data_value IS NOT NULL
			  AND cd.complaint_data_value <> '')
OPTION(RECOMPILE)	

Does anybody have any advice?  Perhaps T4199 is no longer an option once we have production code not using the flag? 

Thanks, Randy


Randy in Marin


Viewing all articles
Browse latest Browse all 15264

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>