Pull to refresh
62
0.1
Олег@unfilled

User

Send message

мне лень куда-то ходить, вот набросал poc

drop table if exists #test;

create table #test (
	id bigint not null primary key
);

insert into #test (
	id
)
select
	[value]
from generate_series (1, 100000)

set statistics time on;
select	
	t = sum(id) over (order by id) 
from #test


select	
	t = sum(id) over (order by id rows between unbounded preceding and current row) 
from #test
set statistics time off;

(100000 rows affected)

(100000 rows affected)

SQL Server Execution Times:
CPU time = 344 ms, elapsed time = 629 ms.

(100000 rows affected)

SQL Server Execution Times:
CPU time = 31 ms, elapsed time = 476 ms.

sql server 2022

С rows/range могут быть ещё нюансы с производительностью. В MS SQL, например, rows between unbounded preceding and current row значительно быстрее range between unbounded preceding and current row (который используется по-умолчанию).

На mssql 2019, такие результаты получал, в одном запросе (все строки были уникальны, результат одинаков)

range - CPU time = 1469 ms

rows - CPU time = 235 ms

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

Пример вывода по данным: Даже пятая аптека дает >10% выручки – все точки важны, нет явных аутсайдеров.

А если есть аптеки, у которых вообще нет продаж, менеджер про это и не узнает, потому что использовал inner join.

Забавно, что производство начиналось с хлеба на закваске (у которого реально долгий цикл), а потом

Изменили технологию. Раньше был хлеб чиабатта — круглый. Производство занимало 24 часа. Закваску поставить, брожение. Перешли на формовой хлеб — маленькими кирпичиками. Замес и сразу в форму. 

т.е. пришли к тому, с чем "боролись"

не знаю, что за город, но в Омске, после того как объездил представителей метты и всех, кто занимается продажей любых офисынх/игровых кресел, внезапно обнаружил собранную йогу в одном из Эльдорадо - там же и убедился, что под мои хараткеристики она не очень подходит (по крайней мере, мне было не настолько удобно, чтобы платить те деньги, что они просят)

Спасибо за статью.

А можете прояснить - как работает DETACH | DELETE PARTITION? Как условный delete "из индекса" - т.е. для каждой строки в отсоединяемой партиции нужно будет найти и отметить строку в глобальном индексе? Или же записи остаются в индексе условно "живыми", а удалёнными отмечаются только при попытке доступа к ним?

Спасибо за ответ.

  1. Меня удивляет отсутвие секций и необходимости online-ребилда в VLDB) но - на нет и суда нет)

  2. Низкий процент заполненности страниц вполне может быть причиной для ребилда, даже если "внешняя" фрагментация не так уж велика.

  3. Спасибо

  4. Если добавить проверку фрагментации для HOT-Таблиц, то может ведь и оказаться, что вполне хватит UPDATE STATISTICS. И таблицы останутся онлайн, и кэши не вымываются, и в журнал транзакций записи практически нет (реплики говорят спасибо)).

Добрый день. Спасибо за труд, возникло несколько вопросов:

  1. А почему для перестроения индексов вы используете deprecated DBCC DBREINDEX, а не ALTER INDEX ... REBUILD? Rebuild позволяет указывать online/offline, явно ограничивать степень параллелизма, в относительно новых версиях добавлены всякие приятности, типа resumable операций и wait at low priority. Плюс даёт возможность перестраивать только нужные секции индекса. У вас нет секционированных индексов?

  2. Почему для не-HOT таблиц учитывается только "внешняя" фрагментация и не учитывает процент заполненности страниц?

  3. Зачем везде fillfactor 90? В т.ч. на [DBA].[ReindexJobLog].

  4. Почему, для HOT таблиц не учитывается никакая фрагментация и таблицы принудительно перестраиваются полностью?

  5. ЕМНИП, табличку с 5-30% даже из актуальной документации убрали.

dba -> разработчик БД

Лет семь уже, как бывший

Перед НГ увидел рекламу этого кресла и аж загорелся. Объездил полгорода, в итоге всё-таки нашёл где оно есть выставленное в зале, посидел и это, правда, восторг для спины. Но для меня оказался очень неудобным подголовник. Мой рост под два метра и подголовник упирается и давит куда-то в шею в макстимальном верхнем положении. От покупки пока отказался. Может ещё выпустят версию для людей повыше.

Ведь априори, если уменьшая фрагментацию, мы увеличиваем плотность данных на страницах

Это ложное утверждение. C fill factor < 100 вы скорее её уменьшаете, но поскольку не отслеживаете - подтвердить или опровергнуть это не получится. Однако люди, которые запустят ваши скрипты, могут сильно удивиться, что индексы выросли, и памяти теперь нужно больше, чем до дефрагментации.

suggested_fillfactor позволяет найти компромисс от полного заполнения станиц и как следствие каждодневное повышение фрагментации и сохранить плотность на должном уровне

А кем он suggested? Зачем он безльтернативно suggested для всех таблиц с фрагментацией больше 5%? А если это историческая таблица с индексом по дате, в которой все изменения происходят в последнем месяце?

А как ваш скрипт учитывает плотность страниц, о которой вы пишете в тексте? Ну, не считая того, что уменьшает её, уменьшая для всех таблиц fill factor?

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

Пример с процедурой выглядит максимально странно:

  1. вложенные циклы - это прям не круто, особенно для такой задачи (вот бы посмотреть на sql-запрос, может он и не такой уж сложный)?

  2. может "терять" данные, если SUM(Quantity) будет одинаковым для 2 и более продуктов, сортировки в запросе нет, на каждый вызов, теоретически, может возвращаться разный продукт;

  3. "сбрасывается" только одна переменнаяv_max_quantity , проверок никаких нет, а что произойдёт, если в предыдущей итерации у clinet_id = 123 был заказ, а у следующего клиента client_id = 124 заказов не было?

Есть примеры с замерами?

При чтении с диска производительность точно (на самом деле уже не точно) упадёт, и не факт, что снижение производительности при чтении фрагментированного индекса будет заметно меньше, чем при чтении нефрагментированного. А если данные уже в памяти - будет ли разница?

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

В какой ситуации фрагментация индекса повлияет на этот запрос? Насколько сильно?

SELECT * FROM MyTable WHERE ID = 12345

В случае, когда ID не уникальны? В случае, когда было много удалений и в индексе "образовался" "лишний" уровень?

Вообще, было бы здорово, если бы в примерах были не просто примеры запросов, а рельная статистика выполнения - с фрагментированным индексом и с дефрагментированным.

как предлагаете аттестовывать специалистов по ним?

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

Сертификации придумали не вчера, наверное, у любого крупного вендора этих сертификаций навалом.

Я абсолютно не сторонник "проф стандартов", но ваше утверждение (предположение?) - это абсурд. Экзамены в школе и ВУЗе ничего не напоминают? Разряды/категории у рабочих профессий (сварщики, электрики)?

1
23 ...

Information

Rating
4,459-th
Location
Омск, Омская обл., Россия
Date of birth
Registered
Activity