Published on

December 27, 2012

Введение в предупреждения Showplan в SQL Server

SQL Server – мощная система управления базами данных, которая может помочь нам оптимизировать производительность. В этой статье блога мы рассмотрим концепцию предупреждений Showplan и то, как они могут помочь нам диагностировать и улучшить производительность запросов.

Предыдущие предупреждения Showplan

В версиях до SQL Server 2012 уже было несколько предупреждений в плане выполнения, которые могли помочь нам выявить проблемы с медленными запросами. Эти предупреждения были разделены на предупреждения на уровне запроса и предупреждения на уровне оператора.

Предупреждения на уровне запроса включали общие проблемы, такие как отсутствие индексов, которые отображались в Management Studio после выполнения запроса. Предупреждения на уровне оператора возникали на уровне оператора и были обозначены желтым восклицательным знаком на значке оператора.

Примеры предупреждений на уровне оператора в предыдущих версиях SQL Server были “Отсутствуют предикаты объединения” и “Отсутствуют статистические данные по столбцу”. Эти предупреждения предоставляли ценную информацию о потенциальных узких местах производительности.

Новые предупреждения Showplan в SQL Server 2012

В SQL Server 2012 были введены новые предупреждения Showplan, которые дополнительно улучшают устранение неполадок и настройку запросов. Эти предупреждения специально решают проблемы с хэш-соединениями и переполнением сортировки в tempdb, вызванные низкими значениями памяти.

С новыми предупреждениями Showplan больше не нужно захватывать события трассировки для выявления предупреждений сортировки или хэша. Сам план выполнения теперь будет отображать эти предупреждения, что упрощает выявление и устранение проблем с производительностью.

Пример: предупреждение о переполнении сортировки

Давайте рассмотрим пример, чтобы понять, как работают новые предупреждения Showplan. Рассмотрим следующий скрипт:

		USE tempdb
		GO
		-- Подготовка данных
		CREATE TABLE Plan_Warning
		(id INT PRIMARY KEY CLUSTERED,
		name VARCHAR(25), website CHAR(50))
		GO
		SET NOCOUNT ON
		GO
		-- Заполнение фиктивными данными
		BEGIN TRAN
		DECLARE @counter INT
		SET @counter = 1
		WHILE @counter <= 100000
		BEGIN
		INSERT INTO Plan_Warning(id, name, website)
		VALUES (@counter, 'Vinod Kumar' + CONVERT(VARCHAR(10), @counter),
		'blogs.ExtremeExperts.com')
		SET @counter = @counter + 1
		END
		COMMIT TRAN
		PRINT 'Загрузка завершена ...'
		GO
	

Теперь выполним следующий запрос:

		SET STATISTICS XML ON
		GO
		SELECT * FROM Plan_Warning
		WHERE id >= 7000
		ORDER BY name DESC OPTION (MAXDOP 1)
		GO
		SET STATISTICS XML OFF
		GO
	

План выполнения для этого запроса будет отображать символ предупреждения с оператором сортировки. В разделе предупреждений будет указано, что произошло переполнение в tempdb. Это происходит, когда запрос извлекает больше строк, чем может поместиться в доступной памяти.

Аналогичные предупреждения могут возникать и для хэш-соединений, где предупреждение будет отображаться на узле хэш-соединения в плане выполнения.

Заключение

Предупреждения Showplan в SQL Server предоставляют ценную информацию о потенциальных проблемах производительности. При обнаружении этих предупреждений важно проанализировать запрос и рассмотреть возможность его оптимизации путем добавления дополнительных условий WHERE или мониторинга роста и конфликтов TempDB.

Путем постоянного изучения и изучения этих мелких деталей в каждом выпуске SQL Server мы можем улучшить производительность наших запросов к базе данных и обеспечить эффективное извлечение данных.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.