
Anton
30.01.2018
20:09:06
69753

Аггей
30.01.2018
20:09:54
Во
https://pastebin.com/YjrEkj0j
Ваш план

Google

Аггей
30.01.2018
20:11:12
Использует индекс
CREATE INDEX i_countrylanguage ON countrylanguage USING btree (countrycode);
А нет. простите. преждевременно

Anton
30.01.2018
20:12:26
https://pastebin.com/A3t7AWgJ

Alexey
30.01.2018
20:14:24
ну да, в мускле index-only scan. только extended в explain уже можно не писать, оно автоматом делается

Аггей
30.01.2018
20:20:52
В дампе 2 таблицы

Anton
30.01.2018
20:21:30
Вернусь, проверю.

Аггей
30.01.2018
20:21:49
Нет таблицы country

Anton
30.01.2018
20:24:15
Странно.
Нет таблицы country
извиняюсь. опечатался в названии таблиы для дампа и дампер не выдал предупреждения.

Аггей
30.01.2018
21:26:04
Тут существенно улучшить конечно не получится. Думаю под конкретно этот запрос строить индекс типа
create index on countrylanguage (language , countrycode) ; (аналог первичного ключа в этой таблице)
безсмысленно.
Но вот немного странно, что у меня план дает 1 секунду время выполнения
у вас аж 4.... на таких объемах размер ram не играет значения.
Интересно на чем вы выполняете запросы.
http://ps.tmpc.ru/927f532d
У меня правда pg - 9.6

Alexey
30.01.2018
21:34:09
пока постгрес свои хэш-джойны развернёт, мускуль по-быстрому на индекс сканах вжух?

Google

Аггей
30.01.2018
21:35:20
Я слабо представляю, что творится у мускуля внутри. Но видимо да - магия

Alexey
30.01.2018
21:36:52
любой планировщик ошибается, вот и вся магия. для этого придумали хинты. а, ну да... :)

Аггей
30.01.2018
21:38:00

Alexey
30.01.2018
21:38:34
да нет, я даже не вникал, если честно, просто мимо крокодил

Аггей
30.01.2018
21:39:02
С изменением объема данных - хинты могут подсказывать неправильно... и пару раз это становилось головной болью с oracle

Alexey
30.01.2018
21:39:46
но я могу накидать примеров, когда оптимизатор в принципе не может знать, как оптимальнее выполнять запрос. например, потому что не знает, что будет читать из памяти, а что с диска
да и все косты вот эти — мы же понимаем, что это очень условные величины

Аггей
30.01.2018
21:46:53
У меня есть система, для которой я хинтом прибил план запроса. Дорогой по CPU и дешевый по диску... но это реально - единственный случай

Anton
30.01.2018
21:49:49
мой локалхост

Аггей
30.01.2018
21:51:36
У меня для сравнения в контейнере, на виртуалке, в цоде делением ядер 1:5. И время выполнения 1 секунда

Anton
30.01.2018
21:52:01

Alexey
30.01.2018
21:53:20

Аггей
30.01.2018
21:53:42

Anton
30.01.2018
21:54:00
что интересно, у оракла с 11й версии появился "автооптимизатор", который по факту исполнения запроса вычисляет ошибки планировщика и исправляет их для следующего запроса

Alexey
30.01.2018
21:55:48
круто, да. но даже он вряд ли учитывает промахи в CPU cache, фрагментацию файлов на диске, и т.д.

Anton
30.01.2018
21:55:50
вобщем, если мне покажете, что на отличном от моего железе пг работает на этой задаче быстрее мыскуля — я буду рад и спокоен как слоник

Google

Alexey
30.01.2018
21:56:41
я понимаю

Anton
30.01.2018
21:57:45
ну и насколько я помню там можно как то это профилями что ли управлять, чтобы когда тебе известен профиль нагрузки на сервер, то можно было их переключать. за давностью лет подзабыл уже

Аггей
30.01.2018
21:58:07

Anton
30.01.2018
21:58:16

Аггей
30.01.2018
22:00:49
Ну он достаточно глуп. Профили да есть - ими можно для конкретного запроса - прибить ту же степень параллелизма. Но есть одно условие - надо всегда использовать биндинг переменных - иначе оракл будет считать каждую версию - разным запросом

Alexey
30.01.2018
22:00:50
ой, я тут слушал доклад про автономные базы данных в оракле. там вообще про какой-то космос рассказывали

Let Eat
30.01.2018
22:01:34

Alexey
30.01.2018
22:01:41
минутку

Anton
30.01.2018
22:01:55
лан, всем сн

Alexey
30.01.2018
22:02:17

Аггей
30.01.2018
22:05:14
Automatic SQL Tuning (Tuning Advisor) вот о чем выше речь шла.

Alexey
30.01.2018
22:06:32
да, но они там в 18c наворотили ещё кучу всего поверх
как-то раз меня занесло на Oracle Open World. ушёл просветлённым...

Аггей
30.01.2018
22:10:39
)) Самый опытный Oracle DBA в нашей организации даже автоматическое управление памятью СУБД не доверяет (до 11 версии было только ручное - с 11 появилось автоматическое)... а тут и бэкапы и восстановление автоматическое... и все все все....

Let Eat
30.01.2018
22:38:11

Usagi
31.01.2018
06:00:34
Ребята, всегда ли оправдано в мастер делать insert, а с реплики select делать?

Sergey
31.01.2018
06:03:17
если коротко то не всегда
реплика может отставать и можно в селекте с неё не увидеть свежего инсерта. Приложение должно быть к такому готово

Usagi
31.01.2018
06:10:41

Google

Sergey
31.01.2018
06:35:07

Usagi
31.01.2018
06:38:06
Если синхронная то да
Синхронность задается в настройках? Эти базы будут в одном кластере Kubernetes, сеть гигабитная между ними.

Sergey
31.01.2018
06:40:19

Usagi
31.01.2018
06:42:24

Сергей
31.01.2018
06:46:01

Sergey
31.01.2018
06:47:11

Usagi
31.01.2018
06:57:26
Похоже, надо еще покурить доки)

Vadim
31.01.2018
07:03:04
при remote_write просядет на запись где то в 1,3 раза, remote_apply - 1,5 раза. Но это очень приблизительно, нужно разбираться в вашем профиле нагрузки. Вы можете делать синхронными только определенные транзакции, которые критичны к читающим операциям на реплике. Но это более гибкая и сложная работа.

Yaroslav
31.01.2018
07:13:36

Sergey
31.01.2018
08:15:22

Аггей
31.01.2018
08:16:10
hash индексы?

Yaroslav
31.01.2018
08:17:22

Sergey
31.01.2018
08:18:37

Аггей
31.01.2018
08:20:14
Я и не вижу смысла в serializable на standby

Yaroslav
31.01.2018
08:21:36
Он же о другом? Или я не понимаю?
Warning
This level of integrity protection using Serializable transactions does not yet extend to hot standby mode.
Т.е. hot standby ACID consistency (и isolation) _не обеспечивает_.

Аггей
31.01.2018
08:23:32
Там записи нет. Все выборки при операции записи (процесс восстановления) завершаются - то есть не могут вернуть неконсистентный набор данных

Yaroslav
31.01.2018
08:26:30

Google

Let Eat
31.01.2018
08:28:05

Аггей
31.01.2018
08:28:54
То есть - если мы используем на мастере - иные уровни изоляции - то снапшот на standby может быть неконсистентен. Так правильно читается этот ворнинг?

Yaroslav
31.01.2018
08:31:04

Аггей
31.01.2018
08:34:36

Yaroslav
31.01.2018
08:37:41

Аггей
31.01.2018
08:39:16
Поищу материал. Стало интересно

Yaroslav
31.01.2018
08:39:26
Вот, кажется, последний thread в -hackers по этому поводу: https://www.postgresql.org/message-id/CAEepm%3D2b9TV%2BvJ4UeSBixDrW7VUiTjxPwWq8K3QwFSWx0pTXHQ%40mail.gmail.com

Alexey
31.01.2018
08:43:31
и правда интересно

Let Eat
31.01.2018
08:49:14


Yaroslav
31.01.2018
08:52:41
Есть где нибудь описание всех этих serializable и проч изоляций для бедных умом? Я официальную доку и читал, слова понимаю, но интуитивно о чем они в целом все равно понять не могу.
Зато, с другой стороны, для использования SERIALIZABLE знать всё это совсем не нужно —- просто соблюдайте простые правила, и всё:
Consistent use of Serializable transactions can simplify development. The guarantee that any set of successfully committed concurrent Serializable transactions will have the same effect as if they were run one at a time means that if you can demonstrate that a single transaction, as written, will do the right thing when run by itself, you can have confidence that it will do the right thing in any mix of Serializable transactions, even without any information about what those other transactions might do, or it will not successfully commit. It is important that an environment which uses this technique have a generalized way of handling serialization failures (which always return with a SQLSTATE value of '40001'), because it will be very hard to predict exactly which transactions might contribute to the read/write dependencies and need to be rolled back to prevent serialization anomalies.
К тому же, в любом правильно написанном приложении такой обработчик исключений уже есть (хотя бы для DEADLOCK-ов), расширить его (добавить SQLSTATE 40001) должно быть тривиально.


Anton
31.01.2018
09:22:15

Аггей
31.01.2018
09:22:59

Anton
31.01.2018
09:23:18
я согласен получить сравнение с мыскулем на том же железе
ну и там не 4 сек, а в реальности где то 2.5 мсек

Аггей
31.01.2018
09:23:38
Мыскуль какой версии?

Anton
31.01.2018
09:23:48
5.7.21

Darafei
31.01.2018
09:23:49

Аггей
31.01.2018
09:24:21
миллисекундам
Да. Я там приводил свой план - у меня в 4 раза лучше