Биты и байты.

Биты и байты.

понедельник, 8 декабря 2014 г.

Кому план? Cвежий план, берем из кэша не стесняемся)

Как всегда возник вопрос где взять план..
1.Метод, взять план из кэша

SELECT UseCounts, Cacheobjtype, Objtype, TEXT, query_plan
FROM sys.dm_exec_cached_plans
CROSS APPLY sys.dm_exec_sql_text(plan_handle)
CROSS APPLY sys.dm_exec_query_plan(plan_handle)
where text like '%Текст%'

Сохранить XML план с расширением .sqlplan 
и открыть через SSMS

2.Метод, посмотреть через SSMS
Для начала включить опцию Актуальный план
Затем запустить выполнение инструкции, план появится в отдельной вкладке
3.Метод, используя опцию SHOWPLAN
SET SHOWPLAN_TEXT ON
SET SHOWPLAN_ALL ON
SET SHOWPLAN_XML ON
SET STATISTICS PROFILE ON
SET STATISTICS XML ON -- The is the recommended option to use

  • SHOWPLAN_TEXT отображает приблизительный план без реального запуска инструкции
  • SHOWPLAN_ALL – Отображает приблизительный план со стоимостными оценками без реального запуска инструкции
  • SHOWPLAN_XML - Displays an XML based estimated execution plan with cost estimations, without executing the query. This is equivalent to the "Display Estimated Execution Plan..." option in SQL Server Management Studio.
  • STATISTICS PROFILE – Выполняет запрос и отображает реальный текстовый план.
  • STATISTICS XML – Выполняет запрос и отображает актуальный план. Эквивалент  опции "Include Actual Execution Plan" в SSMS.

вторник, 2 декабря 2014 г.

Процедура запущена или нет вот в чем вопрос...


Как узнать запущена ли процедура, для этого достаточно использовать встроенные блокировки SQL Server

ALTER PROCEDURE usp_ProcessCustomers
AS
BEGIN
    BEGIN TRANSACTION

    declare @Lock int
    EXEC @Lock = sp_getapplock @Resource = 'ProcessCustomers',
                               @LockMode = 'Exclusive'
    IF (@Lock < 0-- already locked by another process
       RETURN;

-- Do processing here
-- Do processing here

    EXEC sp_releaseapplock @Resource = 'ProcessCustomers'

    COMMIT TRANSACTION
END

Блокировки приложений

Допустим необходимо обеспечить последовательный доступ  к запуску произвольного SQL кода. Например когда работают например несколько экземпляров приложений запускающих один и тот SQL и  мы не хотим чтобы он выполнялся параллельно.
Для таких целей  у SQL сервера есть набор процедур sp_getapplock (устанавливает блокировку) и sp_releaseapplock (снимает блокировку)
стим следующий код в 2 разных сессиях.
И результаты двух сессий
Как видно сообщения во второй сессии появились после того как отработала первая сессия.

About