March 21, 2010 at 4:06 pm
Hi,
We have SQL Server 2005 Reporting service on Server A & it's databases ReportServer & ReportServerTemDB are on Server B. From the Application, when users run the reports, I'm getting the below blocking and the reports are hung:
spidWait TimeTypeResourceCommandSQL UserProgramWin UserCPUI/OHost NameStatusSession SQL
11618,500LCK_M_UKEY: 10:72057594039435264 (06029ecb4f33)DELETEABC\SSRS$Report ServerSSRS$00SSRSsuspended, blockingCREATE PROCEDURE [dbo].[CleanOrphanedSnapshots]
@Machine nvarchar(512),
@SnapshotsCleaned int OUTPUT,
@ChunksCleaned int OUTPUT,
@TempSnapshotID uniqueidentifier OUTPUT
AS
SET DEADLOCK_PRIORITY LOW
CREATE TABLE #tempSnapshot (SnapshotDataID uniqueidentifier)
INSERT INTO #tempSnapshot SELECT TOP 1 SnapshotDataID
FROM SnapshotData WITH (NOLOCK)
where SnapshotData.PermanentRefcount = 0
AND SnapshotData.TransientRefcount = 0
SET @SnapshotsCleaned = @@ROWCOUNT
DELETE ChunkData FROM ChunkData INNER JOIN #tempSnapshot
ON ChunkData.SnapshotDataID = #tempSnapshot.SnapshotDataID
SET @ChunksCleaned = @@ROWCOUNT
DELETE SnapshotData FROM SnapshotData INNER JOIN #tempSnapshot
ON SnapshotData.SnapshotDataID = #tempSnapshot.SnapshotDataID
TRUNCATE TABLE #tempSnapshot
INSERT INTO #tempSnapshot SELECT TOP 1 SnapshotDataID
FROM [ReportServerTempDB].dbo.SnapshotData WITH (NOLOCK)
where [ReportServerTempDB].dbo.SnapshotData.PermanentRefcount = 0
AND [ReportServerTempDB].dbo.SnapshotData.TransientRefcount = 0
AND [ReportServerTempDB].dbo.SnapshotData.Machine = @Machine
SET @SnapshotsCleaned = @SnapshotsCleaned + @@ROWCOUNT
SELECT @TempSnapshotID = (SELECT SnapshotDataID FROM #tempSnapshot)
DELETE [ReportServerTempDB].dbo.ChunkData FROM [ReportServerTempDB].dbo.ChunkData INNER JOIN #tempSnapshot
ON [ReportServerTempDB].dbo.ChunkData.SnapshotDataID = #tempSnapshot.SnapshotDataID
SET @ChunksCleaned = @ChunksCleaned + @@ROWCOUNT
DELETE [ReportServerTempDB].dbo.SnapshotData FROM [ReportServerTempDB].dbo.SnapshotData INNER JOIN #tempSnapshot
ON [ReportServerTempDB].dbo.SnapshotData.SnapshotDataID = #tempSnapshot.SnapshotDataID
Please advice
March 21, 2010 at 7:06 pm
Are your users running their reports from snapshots?
Is a new snapshot generated each time the run a report?
Is the snapshot cleanup fired off each time they run a report?
Are the reports scheduled?
Have you tried scheduling the report, snapshots, and snapshot cleanup to occur at specific times?
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
March 21, 2010 at 7:41 pm
Are your users running their reports from snapshots?
Is a new snapshot generated each time the run a report?
Is the snapshot cleanup fired off each time they run a report?
Are the reports scheduled?
Have you tried scheduling the report, snapshots, and snapshot cleanup to occur at specific times?
Thank you,
all the settings are default. I just deployed the developed rdl files. Here we use ORACLE datasource to get the data.
No, reports are scheduled.
-->Is the snapshot cleanup fired off each time they run a report?
how to make sure the above that the snapshot cleanup fired off each time they run a report?
I-->a new snapshot generated each time the run a report?
How to make sure that a new snapshot generated each time the run a report or not? and generating a new snapshot each time the report runs is good or we need to avoid that
We have an application, where all the reports are under a tab called reports from where a user can select any report and view. Here in web.config file of application server, we mentioned the url http://servername/reportserver and user name & password to access the report server
and there is another user from the datasource to connect to Oracle database and get the data
Please see the attachment
Please advice me what are the settings I need to change to work reporting services effectively and avoid blocking.
thanks so much
March 22, 2010 at 4:37 pm
COuld you please give me some idea to aviod this blocking from Reportserver & Is our Report Server settings (see te attahment) in Reportmanger good or need to change any?
thanks
March 22, 2010 at 5:16 pm
The datasource is Oracle. The reportserver is obviously MS SQL. Which (source db or report db) is showing the contention/ blocking?
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
March 24, 2010 at 1:06 am
the blocking is from Reportserver NOT from Oracle database.
Are your users running their reports from snapshots?
Is a new snapshot generated each time the run a report?
Is the snapshot cleanup fired off each time they run a report?
Are the reports scheduled?
Do I need to set the above settings to avoid blocking? Right now all settings are default and I did not change any.
Please advice me waht settings I need to change
Thank you very much
Kln
March 24, 2010 at 10:40 am
You need to find what is causing the query you pasted to execute. Find what is causing that query to run, and then change it so that query is only executed as a part of a batch job that is scheduled.
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
March 24, 2010 at 2:36 pm
You need to find what is causing the query you pasted to execute. Find what is causing that query to run, and then change it so that query is only executed as a part of a batch job that is scheduled.
Blocking occurring whenever a user runs the report from the application.
Thanks
March 24, 2010 at 3:01 pm
klnsuddu (3/24/2010)
You need to find what is causing the query you pasted to execute. Find what is causing that query to run, and then change it so that query is only executed as a part of a batch job that is scheduled.
Blocking occurring whenever a user runs the report from the application.
Thanks
So the end user runs a report, and the above query is what is being executed?
Or is the above query being executed by something else (like a system job) and thus blocking the reports from the application?
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
March 24, 2010 at 3:11 pm
So the end user runs a report, and the above query is what is being executed?
Or is the above query being executed by something else (like a system job) and thus blocking the reports from the application?
I did NOT configure any jobs on report server and it's simple deployment with default settings and I did not find other than this query, which blocking when a user runs a report
thanks so much
April 13, 2010 at 3:51 pm
Hi,
I got the blocking again from report server. When blocking occured, I logged into the report server & at the same time a log file was generated as below. From that log, I can see (ASSUME), that a report called INCOME REPORT, is causing the issue. But I did not get any idea on what to do. Please help. please see the high lated portion
<Header>
<Product>Microsoft SQL Server Reporting Services Version 9.00.4035.00</Product>
<Locale>en-US</Locale>
<TimeZone>Pacific Daylight Time</TimeZone>
<Path>D:\Microsoft SQL Server\MSSQL.1\Reporting Services\LogFiles\ReportServer__04_13_2010_14_03_01.log</Path>
<SystemName>SSRS</SystemName>
<OSName>Microsoft Windows NT 5.2.3790 Service Pack 2</OSName>
<OSVersion>5.2.3790.131072</OSVersion>
</Header>
w3wp!webserver!1!4/13/2010-14:03:01:: i INFO: Reporting Web Server started
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing ConnectionType to '0' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing IsSchedulingService to 'True' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing IsNotificationService to 'True' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing IsEventService to 'True' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing PollingInterval to '10' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing WindowsServiceUseFileShareStorage to 'False' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MemoryLimit to '60' percent as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing RecycleTime to '720' minute(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MaximumMemoryLimit to '80' percent as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MaxAppDomainUnloadTime to '30' minute(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MaxQueueThreads to '0' thread(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing IsWebServiceEnabled to 'True' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MaxActiveReqForOneUser to '20' requests(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing MaxScheduleWait to '5' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing DatabaseQueryTimeout to '120' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing ProcessRecycleOptions to '0' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing RunningRequestsScavengerCycle to '60' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing RunningRequestsDbCycle to '60' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing RunningRequestsAge to '30' second(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing CleanupCycleMinutes to '10' minute(s) as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing DailyCleanupMinuteOfDay to default value of '120' minutes since midnight because it was not specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing WatsonFlags to '1064' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing WatsonDumpOnExceptions to 'Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException,Microsoft.ReportingServices.Modeling.InternalModelingException' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing WatsonDumpExcludeIfContainsExceptions to 'System.Data.SqlClient.SqlException,System.Threading.ThreadAbortException' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing SecureConnectionLevel to '0' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing DisplayErrorLink to 'True' as specified in Configuration file.
w3wp!library!1!4/13/2010-14:03:01:: i INFO: Initializing WebServiceUseFileShareStorage to 'False' as specified in Configuration file.
w3wp!resourceutilities!1!4/13/2010-14:03:01:: i INFO: Reporting Services starting SKU: Standard
w3wp!resourceutilities!1!4/13/2010-14:03:01:: i INFO: Evaluation copy: 0 days left
w3wp!resourceutilities!1!4/13/2010-14:03:01:: i INFO: Running on 2 physical processors, 8 logical processors
w3wp!runningjobs!1!4/13/2010-14:03:01:: i INFO: Database Cleanup (Web Service) timer enabled: Next Event: 600 seconds. Cycle: 600 seconds
w3wp!runningjobs!1!4/13/2010-14:03:01:: i INFO: Running Requests Scavenger timer enabled: Next Event: 60 seconds. Cycle: 60 seconds
w3wp!runningjobs!1!4/13/2010-14:03:01:: i INFO: Running Requests DB timer enabled: Next Event: 60 seconds. Cycle: 60 seconds
w3wp!runningjobs!1!4/13/2010-14:03:01:: i INFO: Memory stats update timer enabled: Next Event: 60 seconds. Cycle: 60 seconds
w3wp!library!1!04/13/2010-14:03:02:: i INFO: Catalog SQL Server Edition = Enterprise
w3wp!library!a!04/13/2010-14:03:04:: i INFO: Call to RenderFirst( '/Reports/IncomeReport' )
w3wp!runningjobs!1!4/13/2010-14:04:01:: i INFO: Adding: 1 running jobs to the database
w3wp!session!9!04/13/2010-14:13:19:: e ERROR: Sql Error in GetSnapshotData: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at Microsoft.ReportingServices.Library.InstrumentedSqlCommand.ExecuteReader()
at Microsoft.ReportingServices.Library.DatabaseSessionStorage.GetSessionData(String sessionId, UserContext userContext, ConnectionManager connMgr)
w3wp!library!9!04/13/2010-14:13:19:: e ERROR: Throwing Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details., ;
Info: Microsoft.ReportingServices.Diagnostics.Utilities.InternalCatalogException: An internal error occurred on the report server. See the error log for more details. ---> System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader()
at Microsoft.ReportingServices.Library.InstrumentedSqlCommand.ExecuteReader()
at Microsoft.ReportingServices.Library.DatabaseSessionStorage.GetSessionData(String sessionId, UserContext userContext, ConnectionManager connMgr)
at Microsoft.ReportingServices.Library.DatabaseSessionStorage.GetSessionData(String sessionId, UserContext userContext)
at Microsoft.ReportingServices.Library.SessionReportItem.Load(DatabaseSessionStorage sessionStorage, LoadAction loadFlags, String sessionId, String reportPath, DateTime snapshotDate, UserContext userContext, String userParams, String imageName, DatasourceCredentialsCollection dataSourceCred)
at Microsoft.ReportingServices.WebServer.HttpClientRequest.LoadFromDB(LoadAction loadFlags, CatalogItemContext context)
at Microsoft.ReportingServices.WebServer.HttpClientRequest.InitAsExistingSession(UserContext userContext)
at Microsoft.ReportingServices.WebServer.SessionStarterAction.CreateExisting()
--- End of inner exception stack trace ---
w3wp!dbcleanup!7!4/13/2010-14:13:31:: e ERROR: Sql Error in CleanOrphanedSnapshots: System.Data.SqlClient.SqlException: Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe)
at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
at Microsoft.ReportingServices.Library.InstrumentedSqlCommand.ExecuteNonQuery()
at Microsoft.ReportingServices.Library.DatabaseSessionStorage.CleanOrphanedSnapshots(Int32& chunksCleaned)
w3wp!library!7!4/13/2010-14:13:31:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 0 snapshots, 0 chunks, 0 running jobs, 0 persisted streams
w3wp!library!a!04/13/2010-14:16:51:: Using folder D:\Microsoft SQL Server\MSSQL.1\Reporting Services\RSTempFiles for temporary files.
w3wp!webserver!a!04/13/2010-14:16:52:: i INFO: Processed report. Report='/Reports/IncomeReport', Stream=''
w3wp!library!a!4/13/2010-14:23:01:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 0 snapshots, 0 chunks, 0 running jobs, 0 persisted streams
w3wp!library!5!4/13/2010-14:33:01:: i INFO: Cleaned 0 batch records, 0 policies, 0 sessions, 0 cache entries, 0 snapshots, 0 chunks, 0 running jobs, 0 persisted streams
April 13, 2010 at 4:37 pm
I have verified the failed reports but i did find the report INCOME REPORT in failed reports list.
But I did see the report INCOME REPORT running while blocking occuring , in succeeded reports
Failed Reports:
SELECT TOP 2
C.Path, C.Name,
EL.UserName,
EL.Status,
EL.TimeStart,
EL.[RowCount],
EL.ByteCount,
(EL.TimeDataRetrieval
+ EL.TimeProcessing
+ EL.TimeRendering)/1000 AS TotalSeconds,
EL.TimeDataRetrieval,
EL.TimeProcessing,
EL.TimeRendering
FROM ExecutionLog EL
INNER JOIN Catalog C ON EL.ReportID = C.ItemID
WHERE EL.Status <> 'rsSuccess'
ORDER BY TimeStart DESC
Results:
Path name username status TimeStart rowcount bytecount toatlseconds TimeDataRetrieval TimeDataRetrieval TimeDataRetrieval
/Reports/rpt22rpt22ABC\rssrversProcessingAborted2010-04-13 11:35:59.280 2 0 6 0 6752 0
/Reports/rpt23rpt23ABC\rssrversProcessingAborted2010-03-24 14:30:13.640 0 0 1 0 1236 0
Most recently ran reports:
SELECT TOP 2
C.Path, C.Name,
EL.UserName,
EL.Status,
EL.TimeStart,
EL.[RowCount],
EL.ByteCount,
(EL.TimeDataRetrieval
+ EL.TimeProcessing
+ EL.TimeRendering)/1000 AS TotalSeconds,
EL.TimeDataRetrieval,
EL.TimeProcessing,
EL.TimeRendering
FROM ExecutionLog EL
INNER JOIN Catalog C ON EL.ReportID = C.ItemID
ORDER BY TimeStart DESC
Results:
/Reports/IncomeReportIncomeReport ABC\rssrversSuccess2010-04-13 14:03:04.30018836382828347997479338733
/Reports/rpt22rpt22 ABC\rssrversSuccess2010-04-13 13:11:24.7700260770082753
thanks
April 13, 2010 at 5:08 pm
Now that you know which report it is, I would check the SQL in the report and optimize the TSQL as well as tables and indexes for the report.
One possible cause of seeing the report as successfully completed and failed is that it could have been run multiple times. Check to ensure that the report is not running from multiple jobs or as a subreport on another report at the same time.
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
April 13, 2010 at 8:28 pm
here is the whole scenario:
SQL Server 2005 Reporting Services is installed on Server A and it's databases on Server B.
On Server A, All the reporting Services settings are set to default. No other features are using & the Data source is ORACLE.
A user "ABC" is used to connect Oracle database and the option user name & password are stored securely in report server has selected.
On a application server C, in web.config file, provided the
url: http://servername/reportserver
Username: abc\RsReports
Password: xxxxxxxxx
Domain: abc
So from the application, any end user views the report from the application, internally that end user going to invoke the user abc\RsReports, and which in turn connects the Reporting server from there the oracle user ABC connects to ORACLE database and fethes the data for the report.
So what happens if 100 users, clicks the same report from Application?
Is the user abc\RsReports makes 100 connections to report server and this turn invokes the oracle user ABC and it's also makes 100 connections to Oracle database?
How this exactly works?
Please share your inputs and how Reporting Services is configured at your organization?
many thanks
April 13, 2010 at 8:58 pm
Have you looked at the TSQL to optimize the code? The problem you are encountering seems to be a problem in a poorly written query. You need to check the query that the report is running.
Jason...AKA CirqueDeSQLeil
_______________________________________________
I have given a name to my pain...MCM SQL Server, MVP
SQL RNNR
Posting Performance Based Questions - Gail Shaw[/url]
Learn Extended Events
Viewing 15 posts - 1 through 15 (of 22 total)
You must be logged in to reply to this topic. Login to reply