Postgresql query tuning
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Postgresql query tuning
А кто знает как етот постгрес работает, куда бечь почитать. Вот седни первый день с утра установила пгАдмин. До етого никада не видела. Вопрос такой, первый раз время запроса#1 было 4899мс, время запроса #2, якобы улучшенного, 63мс. А вот после етого, когда первый запрос запустить, то время 62мс. Ето ДБ енгине так работает? Или ето глюк?
Надо улучшить запрос то времени. Речь не идет об индексах. Если что-то можно сделать, то только сам запрос переделать. Мы подключаемся к чужой базе вытащить данные. Масса соединений, масса, среди них в некоторых запросах но >10 <outer join>. Прислали два запроса исходный и улучшенный, узучить и внедрить лучшее в практику. Где можно найти как сам ДБ енгине работает в постгрес?
Надо улучшить запрос то времени. Речь не идет об индексах. Если что-то можно сделать, то только сам запрос переделать. Мы подключаемся к чужой базе вытащить данные. Масса соединений, масса, среди них в некоторых запросах но >10 <outer join>. Прислали два запроса исходный и улучшенный, узучить и внедрить лучшее в практику. Где можно найти как сам ДБ енгине работает в постгрес?
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Postgresql query tuning
Это кеширование результата сработало скорее всего. Когда то же квери запускаете движок это распознаёт и отдает вам результат из Кеша .Likenew wrote:А кто знает как етот постгрес работает, куда бечь почитать. Вот седни первый день с утра установила пгАдмин. До етого никада не видела. Вопрос такой, первый раз время запроса#1 было 4899мс, время запроса #2, якобы улучшенного, 63мс. А вот после етого, когда первый запрос запустить, то время 62мс. Ето ДБ енгине так работает? Или ето глюк?
Надо улучшить запрос то времени. Речь не идет об индексах. Если что-то можно сделать, то только сам запрос переделать. Мы подключаемся к чужой базе вытащить данные. Масса соединений, масса, среди них в некоторых запросах но >10 <outer join>. Прислали два запроса исходный и улучшенный, узучить и внедрить лучшее в практику. Где можно найти как сам ДБ енгине работает в постгрес?
Что настроить квери нужно его проанализировать - это целая наука SQL tuning, мне очень нравится одноименная книга кажется от Орайли
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Postgresql query tuning
Так запрос был якобы переделан. Т.е. у меня возникло впечатление, что енгине распознал " не переделанный" запрос как " переделанный"? Я пока ниче не трогала и не вникала. Именно изменение в длительности обработки и было представлено как успех переделки.
Сабина, а ты с постгрес работала? Чем там они тюнят? Я ваще ноль, а надо быстро, нас в помощь перебросили
Сабина, а ты с постгрес работала? Чем там они тюнят? Я ваще ноль, а надо быстро, нас в помощь перебросили
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Postgresql query tuning
Ну первый непеределанный же тоже был запущен, оно ж не только последний результат кеширует.Likenew wrote:Так запрос был якобы переделан. Т.е. у меня возникло впечатление, что енгине распознал " не переделанный" запрос как " переделанный"? Я пока ниче не трогала и не вникала. Именно изменение в длительности обработки и было представлено как успех переделки.
Сабина, а ты с постгрес работала? Чем там они тюнят? Я ваще ноль, а надо быстро, нас в помощь перебросили
Нет конкретно с этой базой не работала, но Гугел говорит что все какой то pgAdmin пользуются
http://wiki.postgresql.org/wiki/Communi ... _GUI_Tools
Тут подробнее
http://dave.webdev.pgadmin.org/docs/1.6 ... -tips.html
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Postgresql query tuning
Тогда похоже, что первые 2 результата не из кеша, все остальное...Сабина wrote:Ну первый непеределанный же тоже был запущен, оно ж не только последний результат кеширует.
Спасибо за ссылки. Надо быстро читать
-
- Уже с Приветом
- Posts: 4637
- Joined: 24 Oct 2009 01:38
- Location: Chicago ;-) -> SFBA!
Re: Postgresql query tuning
Если запрос читает с диска данные, то они тоже хорошо кешируются в кеше ФС операционки, что тоже хорошо ускоряет работу.
In vino Veritas!
-
- Уже с Приветом
- Posts: 3170
- Joined: 17 May 2007 14:07
Re: Postgresql query tuning
Когда делаешь SQL tunning также важно делать cold explain/run (после рестарта сервиса). Postgres достаточно умный с кешированием данный и очень часто последующие запросы работают быстрее так как он загрузил в память индексы и данные. Особенно важно когда размер результируешьго сета меньше чем размер доступной памяти на серевер.
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Postgresql query tuning
Как по-умному очистить кеш, чтобы видеть изменеия в перформенсе?
-
- Уже с Приветом
- Posts: 3170
- Joined: 17 May 2007 14:07
Re: Postgresql query tuning
Как не странно это звучало был но только полные рестатр сервера даст cold start.
http://stackoverflow.com/questions/1216 ... es-buffers
Я вообщем обычно делаю рестарт postgres - это не совсем чистый эксперимент, но разницу в перфоманс конкретного query и оптимизации обычно показывает.
http://stackoverflow.com/questions/1216 ... es-buffers
Я вообщем обычно делаю рестарт postgres - это не совсем чистый эксперимент, но разницу в перфоманс конкретного query и оптимизации обычно показывает.
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Postgresql query tuning
Костик , я такого сделать не могу
А сколько там времени надо с последнего времени пользования, где можно посмотреть установки когда чистится?
А сколько там времени надо с последнего времени пользования, где можно посмотреть установки когда чистится?
-
- Уже с Приветом
- Posts: 3170
- Joined: 17 May 2007 14:07
Re: Postgresql query tuning
Нету там таймаутов Только нагрузка может вытяснить данные.
Кстати Postgers можно еще по другому зайти. Explain достаточно подробный ... можно по нему орентироватся на результаты оптимизации. Почитайте про explain. Он естимайты выдает.
Кстати Postgers можно еще по другому зайти. Explain достаточно подробный ... можно по нему орентироватся на результаты оптимизации. Почитайте про explain. Он естимайты выдает.
-
- Уже с Приветом
- Posts: 1872
- Joined: 03 Dec 2003 23:13
- Location: Одесса - Новая Англия
Re: Postgresql query tuning
Есть способ очистить кэш.Likenew wrote:Как по-умному очистить кеш, чтобы видеть изменеия в перформенсе?
Ждя этого надо заглушить базу и затем заглушить сервер и затем оиключть питание на 30 сек и всё стартануть назад.
Почему это так сложно? Потомц что кэшируется везде и на разных уровнях. Кэшируется в Базе, на уровне ОС, на уровне RAID Array и даже на уровне HDD и наверное ещё где-то где я не упомянул.
Но если вы спрашиваете как практически это делается, то query исполняется с др. параметрами и/или по истечению какого-то времени, когда этот кэш замещается другим, из другой активности. Postgres весьма специфическая и очень хорошая база. Требует изучения и опыта. Пробуйте разные подходы и читайте форумы по нему.
В Postgres хорошо исполняются hash merged queries по сравнению с sort merged и это надо учитывать, когда вы их пишите.
Например, если у вас большая таблица T с полем id то "select distinct id from T" будет почти всегда хуже чем "select id from T group by id".
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Postgresql query tuning
А зачем вам собственно такое делать ? Если вы делаете query tuning и меняете его синтаксис улучшение перформанса будет видно и при кешированных данных. Точнее там не факт что будет из Кеша вычитывать , но никто ж не мешает прогнать два раза и сравнить best timeLikenew wrote:Как по-умному очистить кеш, чтобы видеть изменеия в перформенсе?
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 1872
- Joined: 03 Dec 2003 23:13
- Location: Одесса - Новая Англия
Re: Postgresql query tuning
Вероятнее всего часть кэша будет использована всё равно. Если ваша первая query сбегала и притащила какие-то данные, то вторая query может уже притащить эти данные из кэша, скажем файловой системы. Ей нет нужды читать файл, который только что был уже прочитан и находится уже в кэше. Сама база может об этом и не догадываться, т.к. эта часть исполняется на ОС уровне.Сабина wrote:А зачем вам собственно такое делать ? Если вы делаете query tuning и меняете его синтаксис улучшение перформанса будет видно и на кешированных данныхLikenew wrote:Как по-умному очистить кеш, чтобы видеть изменеия в перформенсе?
Query - это высокоуровневый запрос, которы разбивается на ряд более мелких шагов и эти шаги и связанные с ней данные могут повторяться для совершенно по разному выглядящих queries.
-
- Уже с Приветом
- Posts: 19041
- Joined: 11 Jan 2012 09:25
- Location: CA
Re: Postgresql query tuning
Но ведь конечная цель чтобы квери бегал быстро в ежедневном продакшене ? Значит все же не стоит циклиться на замерах на пустой кеши, а просто тьюнить как есть ? Мы именно так и делали когда я этим плотно занималась. Случаи когда перестартовывали и сравнивала были только когда нужно было эффективность кеширования оценить
https://www.youtube.com/watch?v=wOwblaKmyVw
-
- Уже с Приветом
- Posts: 1872
- Joined: 03 Dec 2003 23:13
- Location: Одесса - Новая Англия
Re: Postgresql query tuning
Это зависит от того для чего query. Часто бывают query, которые бегают раз или два в сутки и даже реже. В этом случае performance на кэше никак не поможет понять, что будет в реальности на production.Сабина wrote:Но ведь конечная цель чтобы квери бегал быстро в ежедневном продакшене ? Значит все же не стоит циклиться на замерах на пустой кеши, а просто тьюнить как есть ? Мы именно так и делали когда я этим плотно занималась. Случаи когда перестартовывали и сравнивала были только когда нужно было эффективность кеширования оценить
-
- Уже с Приветом
- Posts: 2924
- Joined: 01 Apr 2004 04:22
Re: Postgresql query tuning
+1 very good pointoleg lebedev wrote: В Postgres хорошо исполняются hash merged queries по сравнению с sort merged и это надо учитывать, когда вы их пишите.
Например, если у вас большая таблица T с полем id то "select distinct id from T" будет почти всегда хуже чем "select id from T group by id".
@TS, как уже сказали выше, на надо пытаться почистить кеш, надо смотреть / стараться улучшить те цифры, что показывает explain
Я боюсь, что наступит день, когда технологии превзойдут простое человеческое обшение. И мир получит поколение идиотов (c)
-
- Уже с Приветом
- Posts: 12059
- Joined: 15 Feb 2002 10:01
- Location: TX
Re: Postgresql query tuning
Я не знаю, как сделан постгрес, но впечатлена. Даже не могу представить, как ето можно. Пример, исходный запрос выполняется долго, на експлейне смотришь, вначале соединяет большие таблицы, а в самом конце потом применяет фильтрами из <where clause>. Потом, я переделываю запрос, выношу фильтры во <from clause>, чтобы ограничить выборку и соединять маленькие остатки таблиц, они идут в левой части в < left join>, и всегда <seq. scan>. Вижу улучшение. И потом, когда запускаешь старый запрос, то на експлейне уже находишь фильтры в самом начале! Как оно научилось??!! Правда такое происходило с относительно простыми запросами.
-
- Уже с Приветом
- Posts: 15242
- Joined: 01 Mar 2007 05:18
- Location: VVO->ORD->DFW->SFO->DFW->PDX
Re: Postgresql query tuning
Any sufficiently advanced technology is indistinguishable from magic.Likenew wrote:Я не знаю, как сделан постгрес, но впечатлена.
как известно, Артур Кларк
Элементарно, Уотсон!Likenew wrote:Как оно научилось??!!
как известно, Конан Дойль, тоже Артур
Мат на форуме запрещен, блдж!
-
- Уже с Приветом
- Posts: 1872
- Joined: 03 Dec 2003 23:13
- Location: Одесса - Новая Англия
Re: Postgresql query tuning
Если у вас был опыт с Ораклом, то будете впечатлены ещё больше. Postgres даёт полное понимание что такое транзакция. Если в вашей функции есть truncate или даже drop таблицы и вы это уже апроизвели, то вы всё равно сможете откатить транзакцию и всё восстановится как и прежде.Я не знаю, как сделан постгрес, но впечатлена.
В Оракле есть неприятная ошибка 0155 (Snapshot too old), а в Postgres вы ничего подобного не увидете даже если транзакция длится сутки и больше. Ну и др.
-
- Уже с Приветом
- Posts: 17281
- Joined: 07 Sep 2011 10:05
- Location: Seattle, WA
Re: Postgresql query tuning
Да, Постгрес с транзакциями всегда хорошо дружил. Кстати, все никак руки не дойдут с Postgres-XC поиграться. Кто-нибудь пробовал?
-
- Уже с Приветом
- Posts: 2924
- Joined: 01 Apr 2004 04:22
Re: Postgresql query tuning
в постгресе есть kоманда analyze, кот. позволяет ему собрать статистику по указаной таблице (в обшем случае не только по таблице), good practice использовать ее после +/- значительного изменения в таблице. Если все таблицы были т.об. проаналиированы, оно должно научится даже до 1го селеkта.Likenew wrote:Я не знаю, как сделан постгрес, но впечатлена. Даже не могу представить, как ето можно. Пример, исходный запрос выполняется долго, на експлейне смотришь, вначале соединяет большие таблицы, а в самом конце потом применяет фильтрами из <where clause>. Потом, я переделываю запрос, выношу фильтры во <from clause>, чтобы ограничить выборку и соединять маленькие остатки таблиц, они идут в левой части в < left join>, и всегда <seq. scan>. Вижу улучшение. И потом, когда запускаешь старый запрос, то на експлейне уже находишь фильтры в самом начале! Как оно научилось??!! Правда такое происходило с относительно простыми запросами.
Даже как-то можно увидеть распределение, но я не помню как
Я боюсь, что наступит день, когда технологии превзойдут простое человеческое обшение. И мир получит поколение идиотов (c)
-
- Уже с Приветом
- Posts: 2924
- Joined: 01 Apr 2004 04:22
Re: Postgresql query tuning
если произвели с kоммитом или авто коммитом, то все, что сделано, то сделано, восстановится только из бакапа или я чего-то недопоняла ?oleg lebedev wrote: Если у вас был опыт с Ораклом, то будете впечатлены ещё больше. Postgres даёт полное понимание что такое транзакция. Если в вашей функции есть truncate или даже drop таблицы и вы это уже апроизвели, то вы всё равно сможете откатить транзакцию и всё восстановится как и прежде.
Я боюсь, что наступит день, когда технологии превзойдут простое человеческое обшение. И мир получит поколение идиотов (c)
-
- Уже с Приветом
- Posts: 1872
- Joined: 03 Dec 2003 23:13
- Location: Одесса - Новая Англия
Re: Postgresql query tuning
Вы что-то недопоняли.Ljolja wrote:если произвели с kоммитом или авто коммитом, то все, что сделано, то сделано, восстановится только из бакапа или я чего-то недопоняла ?oleg lebedev wrote: Если у вас был опыт с Ораклом, то будете впечатлены ещё больше. Postgres даёт полное понимание что такое транзакция. Если в вашей функции есть truncate или даже drop таблицы и вы это уже апроизвели, то вы всё равно сможете откатить транзакцию и всё восстановится как и прежде.
Backup тут совсем не причём. Мы говорили про транзакции, а это совсем другое.
Commit - это завершение транзакциии. Есть ещё другой способ завершить транзакцию. Это - rollback. В этом случае всё возвращается в исходную позицию, как до начала транзакции. Oracle и Postgres по разному это понимают. Postgres - это multiversion база и её понимание, что такое транзакция намного более глубокое, чем у Oracle. Посмотрите псевдокод:
transaction start
-- table T exists in both Oracle and PostgreSql
drop table T;
-- table T doesn't exists in either Oracle or PostgreSql
rollback;
-- transaction finished
-- table T exists in PostgreSql
-- table T doesn't exists in Oracle
Oracle говорит, мол что DDL (drop, truncate и пр.) - это не DML и не подлежит откату. Возможно это соответствует SQL стандарту, но Postgres - идёт дальше в этом деле.