Size: a a a

SqlCom.ru - Стиль жизни SQL

2020 October 21

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
Alexey Chaykin
SELECT
  OBJECTPROPERTYEX(OBJECT_ID('dbo.DateStrToDate'), 'IsDeterministic') as IsDeterministic,
  OBJECTPROPERTYEX(OBJECT_ID('dbo.DateStrToDate'), 'SystemDataAccess') as SystemDataAccess,
  OBJECTPROPERTYEX(OBJECT_ID('dbo.DateStrToDate'), 'UserDataAccess') as UserDataAccess
А этот запрос что возвращает? Детерминированная UDF должна быть schemabinding вроде как
везде нули;
я хотел сказать, она написана так, что является детерминистической по факту, один аргумент не может выдавать разные результаты
источник

AC

Alexey Chaykin in SqlCom.ru - Стиль жизни SQL
Планировщик этого не знает
источник

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
вот оно что
источник

N

Nik in SqlCom.ru - Стиль жизни SQL
Les
#вакансия #wildberries #москва

Позиция: senior sql разработчик
Вилка: до 250 тр
Удалёнка: возможна
Задачи: Поддержка существующих проектов на СУБД PostgreSQL, перенос существующих проектов с СУБД MS SQL на СУБД PostgreSQL. Написание новых проектов на СУБД PostgreSQL
Опыт: от 3х лет

резюме и вопросы:
телеграм: @avelestat
почта: kim.lestat@wildberries.ru
Знания sql достаточно будет?)
источник

L

Les in SqlCom.ru - Стиль жизни SQL
Nik
Знания sql достаточно будет?)
уверенного да, но преимущество будет у специалистов с навыками python, bash, dba
источник

N

Nik in SqlCom.ru - Стиль жизни SQL
Les
уверенного да, но преимущество будет у специалистов с навыками python, bash, dba
Да вроде понимаю что делаю когда базу проектирую и потом запросы пишу. Руководствуюсь той рекомендацией, что dba на сопровождении больной на голову и знает мой адрес))
источник

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
Max Chistyakov
Всем привет.

Есть таблица с такой структурой
create table dbo.ORDERS (ID int, ENABLED int, [CREATIONDATETIME] float, [CLIENTID] float,
[WORKNAME] varchar(100),[WORKPHONE] varchar(100),[FRIEND] varchar(100),[INFO] varchar(100),[ADULTINFO] varchar(100),[WORKHEADMEN] varchar(100)
);

CREATE NONCLUSTERED INDEX [_dta_index_ORDERS_7_1540200537__K19_K6_K18_K1_7_9_16_34_62_63] ON [dbo].[ORDERS]
(
 [CLIENTID] ASC,
 [ENABLED] ASC,
 [CREATIONDATETIME] ASC,
 [ID] ASC
)
INCLUDE([WORKNAME],[WORKPHONE],[FRIEND],[INFO],[ADULTINFO],[WORKHEADMEN]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
GO

Говорю разработчикам на работе: использовать функции применительно к столбцам в WHERE нельзя, это может привести к сканированию индекса вместо быстрого поиска. На что мне кидают пример запроса по этой таблице:

select o.id from orders o 
where convert(datetime, o.CREATIONDATETIME -2)>= '20201020'
- 2 секунды

select o.id from orders o 
where creationdatetime >= dbo.DateStrToDate('2020-10-20')
- 1 минута.
DateStrToDate
- CLR функция, которая превращает текст в тип float.

В обоих актуал планах используется сканирование индекса _dta_index_ORDERS_7_1540200537__K19_K6_K18_K1_7_9_16_34_62_63, только во втором плане дополнительным шагом идёт итератор FILTER со стоимостью 5%. Статистика по индексу была обновлена перед выполнением запроса, фрагментация - 22%, строк в таблице - 7 млн, значения
creationdatetime
идут с 2012 года по текущий день, с уплотнением начиная с 2018 года. Почему время выполнения двух запросов насколько разное?
А если сканирование индекса (через CONVERT) по 4 столбцам на 7 млн строк происходит за 2 секунды, это что означает, что мне просто повезло с дисковой подсистемой, и верным решением было перенести всё на ssd?
источник

M

Marat in SqlCom.ru - Стиль жизни SQL
Max Chistyakov
А если сканирование индекса (через CONVERT) по 4 столбцам на 7 млн строк происходит за 2 секунды, это что означает, что мне просто повезло с дисковой подсистемой, и верным решением было перенести всё на ssd?
часть данных может в кэше было.
источник
2020 October 22

AP

Andrew Postnov in SqlCom.ru - Стиль жизни SQL
подскажите, плз, перевел файлгрупп в оффлайн, ее как-то можно перевести в онлайн по простому?
источник

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Max Chistyakov
Всем привет.

Есть таблица с такой структурой
create table dbo.ORDERS (ID int, ENABLED int, [CREATIONDATETIME] float, [CLIENTID] float,
[WORKNAME] varchar(100),[WORKPHONE] varchar(100),[FRIEND] varchar(100),[INFO] varchar(100),[ADULTINFO] varchar(100),[WORKHEADMEN] varchar(100)
);

CREATE NONCLUSTERED INDEX [_dta_index_ORDERS_7_1540200537__K19_K6_K18_K1_7_9_16_34_62_63] ON [dbo].[ORDERS]
(
 [CLIENTID] ASC,
 [ENABLED] ASC,
 [CREATIONDATETIME] ASC,
 [ID] ASC
)
INCLUDE([WORKNAME],[WORKPHONE],[FRIEND],[INFO],[ADULTINFO],[WORKHEADMEN]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 95) ON [PRIMARY]
GO

Говорю разработчикам на работе: использовать функции применительно к столбцам в WHERE нельзя, это может привести к сканированию индекса вместо быстрого поиска. На что мне кидают пример запроса по этой таблице:

select o.id from orders o 
where convert(datetime, o.CREATIONDATETIME -2)>= '20201020'
- 2 секунды

select o.id from orders o 
where creationdatetime >= dbo.DateStrToDate('2020-10-20')
- 1 минута.
DateStrToDate
- CLR функция, которая превращает текст в тип float.

В обоих актуал планах используется сканирование индекса _dta_index_ORDERS_7_1540200537__K19_K6_K18_K1_7_9_16_34_62_63, только во втором плане дополнительным шагом идёт итератор FILTER со стоимостью 5%. Статистика по индексу была обновлена перед выполнением запроса, фрагментация - 22%, строк в таблице - 7 млн, значения
creationdatetime
идут с 2012 года по текущий день, с уплотнением начиная с 2018 года. Почему время выполнения двух запросов насколько разное?
Можно, если в СУБД поддерживаться функциональные индексы (индексы по выражениям) и выражение над столбцом совпадает с индексным...
источник

IZ

Ilia Zviagin in SqlCom.ru - Стиль жизни SQL
Max Chistyakov
А если сканирование индекса (через CONVERT) по 4 столбцам на 7 млн строк происходит за 2 секунды, это что означает, что мне просто повезло с дисковой подсистемой, и верным решением было перенести всё на ssd?
Чета ты гонишь....
источник

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
Ilia Zviagin
Можно, если в СУБД поддерживаться функциональные индексы (индексы по выражениям) и выражение над столбцом совпадает с индексным...
Не, это исключено - я же показал определение индекса, который используется, и определение его полей)
источник

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
Marat
sys.dm_exec_function_stats посмотрите сколько у вас execution count и будет понятно
хех, эта вьюха не отображает конкретно эту функцию (( во всяком случае, в v. developer 2017
источник

MC

Max Chistyakov in SqlCom.ru - Стиль жизни SQL
хотя, почему-то вызовы и обычных, не clr-функций, из неё быстро пропадают...
источник

L

Les in SqlCom.ru - Стиль жизни SQL
#вакансия #wildberries #москва

Позиция: senior sql разработчик
Вилка: до 250 тр
Удалёнка: возможна
Задачи: Поддержка существующих проектов на СУБД PostgreSQL, перенос существующих проектов с СУБД MS SQL на СУБД PostgreSQL. Написание новых проектов на СУБД PostgreSQL
Опыт: от 3х лет
Было бы круто: если ты умеешь в python и/или bash

резюме и вопросы:
телеграм: @avelestat
почта: kim.lestat@wildberries.ru
источник

ДШ

Дмитрий Швайка... in SqlCom.ru - Стиль жизни SQL
Всем привет.
Можно ли в MS SQL запретить выполнение запроса, если по его плану  более 3 млн чтений?
источник

S

Svitlanka in SqlCom.ru - Стиль жизни SQL
Народ, привет. Ай нид хелп.
Переношу с одного сервера, на котором mssql 2008 на другой сервер, на котором  mssql 2012 несколько jobs. При запуске на 2012 выдаёт ошибку:

Message
Executed as user: ODNICE\Administrator. Microsoft (R) SQL Server Execute Package Utility Version 11.0.7001.0 for 64-bit Copyright (C) Microsoft Corporation. All rights reserved. Started: 11:11:16 AM Error: 2020-10-22 11:11:16.29 Code: 0xC001700A Source: Package Description: The version number in the package is not valid. The version number cannot be greater than current version number. End Error Error: 2020-10-22 11:11:16.29 Code: 0xC0016020 Source: Package Description: Package migration from version 8 to version 6 failed with error 0xC001700A "The version number in the package is not valid. The version number cannot be greater than current version number.". End Error Error: 2020-10-22 11:11:16.29 Code: 0xC0010018 Source: Package Description: Error loading value "<DTS:Property xmlns:DTS="www.microsoft.com/SqlServer/Dts" DTS:Name="PackageFormatVersion">8</DTS:Property>" from node "DTS:Property". End Error Could not load package "D:\SQLDATA\SSIS\Adelina_and_Beeper\Adelina_and_beeper.dtsx" because of error 0xC0010014. Description: The package failed to load due to error 0xC0010014 "One or more error occurred. There should be more specific errors preceding this one that explains the details of the errors. This message is used as a return value from functions that encounter errors.". This occurs when CPackage::LoadFromXML fails. Source: Package Started: 11:11:16 AM Finished: 11:11:16 AM Elapsed: 0.14 seconds. The package could not be loaded. The step failed.

Как пофиксить?
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Дмитрий Швайка
Всем привет.
Можно ли в MS SQL запретить выполнение запроса, если по его плану  более 3 млн чтений?
Ну можно лезть в кэш планов парсить xml и подсчитывать оттуда estimate rows, но проще смотреть сколько конкретная сессия потребила ресурсов и килять ее.
Но вообще странная задача. Если вам надо ограничить пользователей чтобы они у вас ресурсы не выжирали, то настройте resource governor  и ограничьте пользователей ресурсным пулом
источник

ДШ

Дмитрий Швайка... in SqlCom.ru - Стиль жизни SQL
ресурсный пул просто замедлит выполнение ... мне замедлять не надо... надо чтобы тяжелые запросы не выполнялись в принципе
источник

DI

Dmitriy Ivanov in SqlCom.ru - Стиль жизни SQL
Дмитрий Швайка
ресурсный пул просто замедлит выполнение ... мне замедлять не надо... надо чтобы тяжелые запросы не выполнялись в принципе
когда выполняется очень медленно и долго без потребления ресурсов - это почти никогда.
пишите процедуры на все ваши запросы и будете тогда их все контролировать.
Или парсинг плана
источник