Re[6]: постгресс ненависти псто №2
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.09.23 01:12
Оценка:
Здравствуйте, paucity, Вы писали:
P>Ты прочитал лекцию "MySQL — днище," а теперь ищешь аргументы, как это обосновать?
А то
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[6]: постгресс ненависти псто №2
От: _FRED_ Черногория
Дата: 19.09.23 07:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>По MySQL все описано тут https://dev.mysql.com/doc/refman/8.0/en/optimization.html


S>>Вообще, похоже, за три мажорных релиза, прошедших с тех пор, как я на него смотрел в последний раз, ребята неплохо продвинулись
G>Есть такое, но доверия пока мало. Опыт знакомых говорит что MySQL все еще нещадно тормозит на нетривиальных запросах.

Оу, спасибо, смотрю они придумали воркэраунд (через CTE) для невозможности селф-джойна временной таблицы.
Help will always be given at Hogwarts to those who ask for it.
Re[7]: постгресс ненависти псто №2
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.09.23 00:52
Оценка: +1
_FR>Оу, спасибо, смотрю они придумали воркэраунд (через CTE) для невозможности селф-джойна временной таблицы.
Ну так это же не временная таблица. Это не воркэраунд, это смена семантики запроса.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: постгресс ненависти псто №2
От: nikkit  
Дата: 08.10.23 09:09
Оценка:
Gt_>здравый смысл ? и это про базу которая три десятилетия фигачила десяток типов блокировок которые так и ничего кроме дедлоков и не дали, все равно как у оракла и пострес версионность пришлось прикручивать ?

не там проблемы ищешь. с кривыми руками и соответственно архитектурой приложения можно положить что угодно.
Re[6]: постгресс ненависти псто №2
От: · Великобритания  
Дата: 08.10.23 10:56
Оценка: 6 (1)
Здравствуйте, nikkit, Вы писали:

n> Gt_>здравый смысл ? и это про базу которая три десятилетия фигачила десяток типов блокировок которые так и ничего кроме дедлоков и не дали, все равно как у оракла и пострес версионность пришлось прикручивать ?

n> не там проблемы ищешь. с кривыми руками и соответственно архитектурой приложения можно положить что угодно.
Например, такое принципиально не лечится. Блокировочникам место в анналах истории.
avalon/3.0.0
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[6]: постгресс ненависти псто №2
От: Gt_  
Дата: 08.10.23 17:50
Оценка: +1 :)
Gt_>>здравый смысл ? и это про базу которая три десятилетия фигачила десяток типов блокировок которые так и ничего кроме дедлоков и не дали, все равно как у оракла и пострес версионность пришлось прикручивать ?

N>не там проблемы ищешь. с кривыми руками и соответственно архитектурой приложения можно положить что угодно.


можно положить что у годно, но это можно же было изначально положиться на здравый смысл и сделать нормально, у нас перед глазами оракл и постгрес. а у мсскл вышло порно которое пытались лечить всякими хинтами в стиле skip locked, блокировками намерений и прочей наркоманией. теперь в базе может быть пол транзакций блокировочные, другая на snapshot. и глядя на это ты нам втираешь про здравый смысл и интуицию ? да у мсскл основные счетчики спрятаны в performance мониторе винды, команды shirnk не отрабатывают по десятку причин, кластер, который и близко не кластер. не стоит втирать про здравый смысл с таким поделием.
Re[5]: постгресс ненависти псто №2
От: scf  
Дата: 21.11.23 20:21
Оценка:
Здравствуйте, Dym On, Вы писали:

DO>Мануалы нужно вообще читать, и лучше перед тем, как что-то собираешься сделать.


В случае оракла — это две книжки по две тысячи страниц.
Re[5]: постгресс ненависти псто №2
От: Константин Л.  
Дата: 30.11.23 00:02
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, AndrewN, Вы писали:

AN>>То, что в MSSQL TOP 1 имеет более высокий приоритет над DISTINCT — вот это реальный трэш.
S>Хотелось бы увидеть пример таблицы, для которой такой приоритет операций приведёт к неверному результату.

стоит заменить (1) на что-то другое и поле примеров заметно расширится

S>"Реальный трэш" — это когда запрос выдаёт не то, что должен.

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

что, в оптимизаторе написан специальный кейс для top 1?

[]
Re[6]: постгресс ненависти псто №2
От: Sinclair Россия https://github.com/evilguest/
Дата: 30.11.23 00:53
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>стоит заменить (1) на что-то другое и поле примеров заметно расширится

А, понятно. Ну, это просто непонимание семантики SQL. Приоритет операций надо задавать вложенными запросами.
select distinct * from (select top 10 ...);

S>>"Реальный трэш" — это когда запрос выдаёт не то, что должен.
S>>"Просто трэш" — это когда оптимизатор не использует какую-нибудь очевидную эквивалентность и перемалывает байты впустую.
S>>А когда оптимизатор выбирает оптимальный способ исполнения запроса, гарантируя сохранение семантики — это как раз норма.

КЛ>что, в оптимизаторе написан специальный кейс для top 1?

В хорошем — должен быть. Потому что разные алгоритмы джойна имеют разные оценки для времени получения первой записи и для времени получения последней записи.
Если у нас нет top, то надо выбирать алгоритм, который долго запрягает, но быстро ездит.
А если есть — то наоборот, надо выбирать алгоритм, который быстро выдаст начало. Даже если он в целом будет медленнее — неважно, ведь работа всё равно будет прервана после отдачи первых N записей.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[5]: постгресс ненависти псто №2
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 30.11.23 01:08
Оценка:
Здравствуйте, Dym On, Вы писали:

N>>просто в отличие от sql server, на оракле и постгресс здравый смысл и интуицию использовать бесполезно. нужно обязательно читать мануалы

DO>Мануалы нужно вообще читать, и лучше перед тем, как что-то собираешься сделать.

Это удел слабаков
Маньяк Робокряк колесит по городу
Re[7]: постгресс ненависти псто №2
От: Константин Л.  
Дата: 30.11.23 11:23
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Константин Л., Вы писали:


КЛ>>стоит заменить (1) на что-то другое и поле примеров заметно расширится

S>А, понятно. Ну, это просто непонимание семантики SQL. Приоритет операций надо задавать вложенными запросами.
S>
S>select distinct * from (select top 10 ...); 
S>


разность двух интуиций

КЛ>>что, в оптимизаторе написан специальный кейс для top 1?

S>В хорошем — должен быть. Потому что разные алгоритмы джойна имеют разные оценки для времени получения первой записи и для времени получения последней записи.
S>Если у нас нет top, то надо выбирать алгоритм, который долго запрягает, но быстро ездит.
S>А если есть — то наоборот, надо выбирать алгоритм, который быстро выдаст начало. Даже если он в целом будет медленнее — неважно, ведь работа всё равно будет прервана после отдачи первых N записей.

не для top n, для top 1
Re[7]: постгресс ненависти псто №2
От: nikkit  
Дата: 02.12.23 09:05
Оценка:
Gt_>можно положить что у годно, но это можно же было изначально положиться на здравый смысл и сделать нормально, у нас перед глазами оракл и постгрес. а у мсскл вышло порно которое пытались лечить всякими хинтами в стиле skip locked, блокировками намерений и прочей наркоманией. теперь в базе может быть пол транзакций блокировочные, другая на snapshot. и глядя на это ты нам втираешь про здравый смысл и интуицию ? да у мсскл основные счетчики спрятаны в performance мониторе винды, команды shirnk не отрабатывают по десятку причин, кластер, который и близко не кластер. не стоит втирать про здравый смысл с таким поделием.

в запросах писать with(nolock) религия не позволяет?
Re[8]: постгресс ненависти псто №2
От: Gt_  
Дата: 02.12.23 09:34
Оценка:
Gt_>>можно положить что у годно, но это можно же было изначально положиться на здравый смысл и сделать нормально, у нас перед глазами оракл и постгрес. а у мсскл вышло порно которое пытались лечить всякими хинтами в стиле skip locked, блокировками намерений и прочей наркоманией. теперь в базе может быть пол транзакций блокировочные, другая на snapshot. и глядя на это ты нам втираешь про здравый смысл и интуицию ? да у мсскл основные счетчики спрятаны в performance мониторе винды, команды shirnk не отрабатывают по десятку причин, кластер, который и близко не кластер. не стоит втирать про здравый смысл с таким поделием.

N>в запросах писать with(nolock) религия не позволяет?


если цель показать на сколько далек мсскл от логики — да, можно и грязное чтение.
Re[8]: постгресс ненависти псто №2
От: VladiCh  
Дата: 08.12.23 07:06
Оценка:
Здравствуйте, Константин Л., Вы писали:

КЛ>разность двух интуиций


КЛ>>>что, в оптимизаторе написан специальный кейс для top 1?

S>>В хорошем — должен быть. Потому что разные алгоритмы джойна имеют разные оценки для времени получения первой записи и для времени получения последней записи.
S>>Если у нас нет top, то надо выбирать алгоритм, который долго запрягает, но быстро ездит.
S>>А если есть — то наоборот, надо выбирать алгоритм, который быстро выдаст начало. Даже если он в целом будет медленнее — неважно, ведь работа всё равно будет прервана после отдачи первых N записей.

КЛ>не для top n, для top 1


Ну вообще можно и для top 1, не убудет.
top 1 (ну в смысле limit 1) это довольно частый вариант, его оптимизация стоит того.
Оптимизатор в Постгресе говно, как ни крути.
Он потихоньку становится лучше. Но говна там все еще навалом.
Re[2]: постгресс ненависти псто №2
От: VladiCh  
Дата: 08.12.23 07:09
Оценка:
Здравствуйте, Maniacal, Вы писали:

M>Здравствуйте, nikkit, Вы писали:


N>>ну как так-то? и нахрена так было сделано? может есть разумное объяснение такому поведению?

M>DISTINCT это автоматом GROUP BY, что тормознее даже, чем ORDER BY

Нет не тормознее. Там банальный Hash Aggregate, т.е. запихивание значений в HashSet, что гораздо проще сортировки.
Re[3]: постгресс ненависти псто №2
От: VladiCh  
Дата: 08.12.23 07:14
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>На самом деле для человека, владеющего техниками оптимизации для SQL Server изучить оптимизацию для Postgres несложно, там примерно на порядок меньше вариантов операторов в плане, а множество типов индексов, которых нет в SQL Server, оптимизируют вполне конкретные функции.

G>Остается только разобраться с vacuum.

На порядок, это сколько, в сравнении? Я просто немного с mssql знаком (с postgres знаком очень хорошо), а вы похоже наоборот.
Но я там не заметил на порядок большего количества типов шагов. в плане выполнения (про это я так понимаю речь?). А количество индексов в Постгресе не просто так, они для специфических типов данных (массивов, деревьев, geo координат и т.п.), которые отдельно в mssql не поддерживаются.
Re[4]: постгресс ненависти псто №2
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.12.23 07:57
Оценка: +1
Здравствуйте, VladiCh, Вы писали:

VC>Здравствуйте, gandjustas, Вы писали:


G>>На самом деле для человека, владеющего техниками оптимизации для SQL Server изучить оптимизацию для Postgres несложно, там примерно на порядок меньше вариантов операторов в плане, а множество типов индексов, которых нет в SQL Server, оптимизируют вполне конкретные функции.

G>>Остается только разобраться с vacuum.

VC>На порядок, это сколько, в сравнении?

Примерно в 10 раз, ну может быть в 5.

VC>Я просто немного с mssql знаком (с postgres знаком очень хорошо), а вы похоже наоборот.

Я хорошо знаком с обоими системами

VC>Но я там не заметил на порядок большего количества типов шагов.

Сравни
https://learn.microsoft.com/en-us/sql/relational-databases/showplan-logical-and-physical-operators-reference
https://www.postgresql.org/docs/15/runtime-config-query.html (к сожалению только перечень флагов, отключающих те или иные операторы)


VC>в плане выполнения (про это я так понимаю речь?). А количество индексов в Постгресе не просто так, они для специфических типов данных (массивов, деревьев, geo координат и т.п.), которые отдельно в mssql не поддерживаются.

Что вы такое говорите. Геотипы в MS SQL с соответствующими индексами поддерживаются с 2016 версии (7 лет)
Столько же работает JSON в колонках (массивы, деревья).

А еще есть inmemory, columnstore, графовые таблицы, не говоря уже о ledger databases и historical tables
Re[5]: постгресс ненависти псто №2
От: VladiCh  
Дата: 09.12.23 00:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, VladiCh, Вы писали:


VC>>Здравствуйте, gandjustas, Вы писали:


G>>>На самом деле для человека, владеющего техниками оптимизации для SQL Server изучить оптимизацию для Postgres несложно, там примерно на порядок меньше вариантов операторов в плане, а множество типов индексов, которых нет в SQL Server, оптимизируют вполне конкретные функции.

G>>>Остается только разобраться с vacuum.

VC>>На порядок, это сколько, в сравнении?

G>Примерно в 10 раз, ну может быть в 5.

Бред же. Часть из них при этом просто операторы T-SQL типа If и While.
Часть относится специфически к кластерным индексам, которых нет в Постгресе (он любые типы индексов вообще рассматривает одинаково в плане),
часть к Parallel и Remote выполнению (опять же все есть в Постгресе но нет отдельный nodes для них).
Да и я вообще не поленился посчитать — в Postgres формально 42 типа, в MSSQL 110. Не дотягивает даже до 3x, не то что 5x или 10x.
https://github.com/postgres/postgres/blob/aa210e0c121eb8f58c86d4fcc833a5a6fbb6f5a9/src/backend/executor/execProcnode.c#L166 — можно тут посмотреть
А учитывая то что я написал выше там реально и 2x не будет.
В pl/pgsql тоже есть while в общем то и много что еще, но ты не найдешь этого в планах.
Всякие Adaptive Join там тоже есть но не в качестве отдельных элементов плана.
Вы тут сравниваете яблоки с апельсинами, как говорится.

VC>>Я просто немного с mssql знаком (с postgres знаком очень хорошо), а вы похоже наоборот.

G>Я хорошо знаком с обоими системами

Что-то есть сомнения в этом.

VC>>Но я там не заметил на порядок большего количества типов шагов.

G>Сравни
G>https://learn.microsoft.com/en-us/sql/relational-databases/showplan-logical-and-physical-operators-reference
G>https://www.postgresql.org/docs/15/runtime-config-query.html (к сожалению только перечень флагов, отключающих те или иные операторы)

Это вообще тут ни причем.

VC>>в плане выполнения (про это я так понимаю речь?). А количество индексов в Постгресе не просто так, они для специфических типов данных (массивов, деревьев, geo координат и т.п.), которые отдельно в mssql не поддерживаются.

G>Что вы такое говорите. Геотипы в MS SQL с соответствующими индексами поддерживаются с 2016 версии (7 лет)
G>Столько же работает JSON в колонках (массивы, деревья).

G>А еще есть inmemory, columnstore, графовые таблицы, не говоря уже о ledger databases и historical tables


Что толку то от этих графовых таблиц, я про типы индексов говорю. Есть columnstore, ok (из того чего нет в Postgres), хотя есть extension для этого (и еще для 100500 других вещей)
В обратную сторону там 4-5 типов индексов есть которых нет в MSSQL.
Отредактировано 09.12.2023 15:11 VladiCh . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.