Информация

Последние записи

Теги


Блоги


Записи из всех блогов на Sql.ru с тегом: SQL Server


Tips for DBA: “SET QUERY_STORE = OFF” AND “QUERY STORE BACKGROUND FLUSH DB”

Если выполнение отключения QS для базы данных блокируется системным процессом: QUERY STORE BACKGROUND FLUSH DB

SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [DATABASENAME] SET QUERY_STORE = OFF WITH NO_WAIT
GO


Подключиться через DAC и сделать:

TRUNCATE table sys.plan_persist_runtime_stats;
TRUNCATE table sys.plan_persist_runtime_stats_interval;
TRUNCATE table sys.plan_persist_plan;
TRUNCATE table sys.plan_persist_query;
TRUNCATE table sys.plan_persist_query_text;
TRUNCATE table sys.plan_persist_context_settings;


Подробности можно найти тут: Manually Clearing the Query Store
автор: Александр Гладченко добавлено: 22 апр 20 просмотры: 1672, комментарии: 0



Tips for DBA: The SQL Server service and the SQL Server Agent Service fail to start on a stand-alone

Если в журнале приложений есть ошибки для MSSQLService: “…TDSSNIClient initialization failed with error 0x80092004…” нужно В POWERSHELL создать самоподписной сертификат (заменив в скрипте имя SERVERNAME.DOMENNAME.ru на полное имя вашего сервера):

New-SelfSignedCertificate -Type SSLServerAuthentication -DnsName SERVERNAME.DOMENNAME.ru -KeyLength 2048 -KeySpec KeyExchange -KeyUsage KeyEncipherment -TextExtension @(“2.5.29.37={text}1.3.6.1.5.5.7.3.1”) -NotAfter (Get-Date).AddMonths(1200)
Далее нужно указать для протоколов созданный сертификат, как это описано в главе “Configuring SSL for SQL Server” статьи: https://docs.microsoft.com/en-us/previous-versions/sql/sql-server-2008-r2/ms189067(v=sql.105)
автор: Александр Гладченко добавлено: 10 фев 20 просмотры: 2989, комментарии: 0



План запроса с уровнем изоляции «Read Committed»

Craig Freedman, 2 мая 2007г. Оригинал статьи тут: https://blogs.msdn.microsoft.com/craigfr/2007/05/02/query-plans-and-read-committed-isolation-level/

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

Продолжить чтение.
автор: Александр Гладченко добавлено: 04 фев 20 просмотры: 3368, комментарии: 0



Контекст сеанса

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней которые изменят твою жизнь.

Введение
В каждой сессии есть возможность использовать специальные структуры данных, именуемые контекст.
Контексты - это набор данных вида - параметр значение. Контекст предоставляет дополнительные возможности для приложений, использующих СУБД Oracle.
Теория и практика
Контекст - это предопределённый набор параметров и значений создаваемый в рамках определенной сессии. Несколько таких наборов параметр значение, объединяется с помощью структуры называемой контекстом.

Задается значение контекста с помощью процедуры DBMS_SESSION.SET_CONTEXT

Функция SYS_CONTEXT позволяет получить значение заданного контекста в раках сессии.
Для создания контекста специальная команда CREATE CONTEXT.
Сначала следует создать специальною процедуру для управления контекстом.

CREATE OR REPLACE PROCEDURE set_mycontext_value ( par IN VARCHAR2, val IN VARCHAR2 ) 
AS BEGIN  DBMS_SESSION.SET_CONTEXT ( 'myctx', par, val ); END;

CREATE OR REPLACE CONTEXT myctx USING set_mycontext_value;

читать дальше...
автор: Myp3_u_K добавлено: 18 фев 19 просмотры: 9610, комментарии: 0



SQL Server 2017: Adaptive Query Processing

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

Эти методы объединяются под общим названием – Adaptive Query Processing, и состоят из трех основных компонентов:

• Adaptive Memory Grant Feedback
• Interleaved Execution
• Adaptive Joins

Далее мы рассмотрим каждый из этих методов, где они применяются и какой имеют эффект. Для демонстрации примеров я буду использовать SQL Server 2017 CTP 2.0 совместно с SQL Server Management Studio 17.0.

Читать дальше...


Использование GUID в ORACLE

Блог: Oracle SQL
Чалышев Максим Михайлович
SQL. 5 дней которые изменят вашу жизнь.

Бесплатные авторские видеокурсы SQL, PLSQL, JAVA
моя книга , изучаем Oracle SQL, бесплатно
Oracle SQL. 100 шагов от новичка до профессионала. 20 дней новых знаний и практики или платная печатная версия

GUID некоторая уникальная последовательность символов, в некоторых случаях, может использоваться в качестве первичного ключа.
Рассмотрим основные работы с GUID в ORACLE.

Получить GUID в ORACLE можно, воспользовавшись функцией
sys_guid()
запрос в этом случае будет выглядеть следующим образом
select sys_guid() from dual

результат
4A9B3CF364FB92CAE050A8C0670A0D3A
Для получения GUID в PL SQL используются несколько аналогичная команда
Следует так же отметить, что для ранения GUID в ORACLE используются следующие типы данных
raw(16) и varchar2(32);

следующие примеры демонстрируют работу c GUID в PL/SQL ORACLE
declare
  p_raw raw(16); 
begin
  p_raw := sys_guid;
  dbms_output.put_line(p_raw);
end;

результат 4A9B3CF3650092CAE050A8C0670A0D3A

declare
  p_vc2 varchar2(32);
begin
  p_vc2 := sys_guid;
  dbms_output.put_line(p_vc2);
end;

результат 4A9B3CF3652292CAE050A8C0670A0D3A
читать дальше...
автор: Myp3_u_K добавлено: 13 мар 17 просмотры: 12353, комментарии: 5



USE HINT и DISABLE_PARAMETER_SNIFFING

Прослушивание параметров — это прием оптимизации, который позволяет использовать значения параметров модуля (например, хранимой процедуры или функции), во время первого вызова, для оценки предполагаемого числа строк при построении плана.

Прослушивание параметров в большинстве случаев полезная вещь, но эта техника плохо работает если значения параметров сильно отличаются по селективности. Например, в случае если для одного значения параметра выбирается 99% строк таблицы, а для второго 1% — серверу может быть выгодно использовать разные планы. Один план будет более эффективен для большего числа строк, второй для меньшего.

Однако, если работает прослушивание параметров, план будет построен для того значения, что было передано при первом вызове. Если для этого значения выбирается небольшое число строк, будет построен план выгодный для получения небольшого числа строк. Когда значение параметра изменится так, что процедура должна будет вернуть гораздо больше строк, план останется «старым», эффективным для небольшого числа строк. Давайте рассмотрим простой пример, который иллюстрирует проблему.

Читать дальше...
автор: SomewhereSomehow добавлено: 17 фев 17 просмотры: 2594, комментарии: 0



USE HINT и ENABLE_QUERY_OPTIMIZER_HOTFIXES

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

Очень часто, внеся исправления, они оставляют их по умолчанию выключенными, чтобы, если вы не испытываете проблем, вы не заметили эти исправления, и они никак не повлияли на производительность вашего приложения (исключение составляют серьезные ошибки, например, те, которые могут вести к неверным результатам). В то же время, если у вас есть проблемы, вы могли бы включить эти исправления и получить нужный эффект.
Читать дальше…
автор: SomewhereSomehow добавлено: 12 фев 17 просмотры: 2000, комментарии: 0



USE HINT и FORCE_LEGACY / DEFAULT_CARDINALITY_ESTIMATION

Продолжаем рассматривать примеры использования хинтов при помощи USE HINT.

В этой заметке мы посмотрим, как управлять версией механизма оценки кардинальности с помощью хинтов FORCE_DEFAULT_CARDINALITY_ESTIMATION и FORCE_LEGACY_CARDINALITY_ESTIMATION.

Cardinality Estimation, СЕ (оценка кардинальности) – это оценка предполагаемого числа строк, которое будет обработано тем или иным оператором запроса. Оценка – один из ключевых факторов при построении плана запроса (более подробно я рассматривал эту тему в докладе кардинальность и планы выполнения). Оценку числа строк осуществляет компонент Cardinality Estimator.

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

Начиная с SQL Server 2014 у сервера появилась новая модель оценки строк, адаптированная к современным рабочим нагрузкам. Эта модель оценки имеет новую архитектуру, расширяема и дополняема, версия этой модели получила номер 120 (по аналогии с уровнем совместимости БД, соответствующим серверу 2014 – 120). В 2016 сервере современная модель была расширена и получила номер версии 130, при этом версия 120 сохранилась. В еще не вышедшем, на момент написания статьи, RTM сервере vNext уже есть модель версии 140.

Читать дальше...
автор: SomewhereSomehow добавлено: 05 фев 17 просмотры: 2267, комментарии: 0



USE HINT и DISABLE_OPTIMIZED_NESTED_LOOP

Один из доступных алгоритмов соединения двух таблиц в SQL Server это вложенные циклы (Nested Loops). В зависимости от выбранного оптимизатором порядка соединения таблиц, одна из таблиц выбирается как внешняя (по ней открывается внешний цикл), вторая как внутренняя (для каждой строки из внешней таблицы выполняется внутренний цикл по второй таблице), во время соединения, внутри циклов проверяется условие соединение, такой подход называется «наивный» алгоритм вложенных циклов. Если же по внутренней таблице доступен индекс по условию соединения, то необязательно выполнять внутренний цикл проверки по каждой строке второй таблицы, вместо этого, можно передать в качестве аргумента поиска значение из внешней таблицы, а все строки, что будут найдены во внутренней таблице соединить со строкой из внешней таблицы.

Поиск по внутренней таблице — это случайный доступ, SQL Server начиная с версии 2005 имеет оптимизацию, называемую batch sort (не путать с оператором Sort в Batch Mode для колоночных индексов). Идея оптимизации заключается в том, чтобы перед тем, как получить данные из внутренней таблицы, упорядочить ключи поиска из внешней, превратив тем самым случайный доступ в последовательный.

Читать дальше…
автор: SomewhereSomehow добавлено: 01 фев 17 просмотры: 2323, комментарии: 2


предыдущие записи