Как оптимизировать запрос на создание материализованных представлений?
Добрый день!
Нужно создать материализованное представление, но из-за ограничения кубера в 64мб постоянно вылетает с ошибкой:
SQLSTATE[53100]: Disk full: 7 ERROR: could not resize shared memory segment "/PostgreSQL.1388503408" to 67244032 bytes: No space left on device
Сам запрос довольно большой, но простой ,и если брать с лимитом по 500, то первые страницы грузятся, последние уже нет. Есть ли какие нибудь практики создания таких больших представлений? Может частями, и если так можно, то как это выглядит?
Если переформулировать, то вопрос будет звучать так "Как материализовать запрос, если материализовывать негде?".
Решения:
- увеличить лимит на дисковое пространство;
- не материализовывать;
- оптимизировать запрос.
Есть ли какие нибудь практики создания таких больших представлений?
Каких таких больших? Единственная озвученная цифра 64Мб, что настолько мало, что не понятно, зачем здесь материализация, тем более если "запрос простой".
Может частями, и если так можно, то как это выглядит?
Можно частями, если так можно. Выглядит так, что сперва обрабатываете и отдаете одну часть, затем другую.
По решениям
- увеличить лимит памяти для шэра кубер не разрешает - это точно
- надо)
- там три джоина с одним условием, куда уж проще
Проблема собственно только в том что таблицы огромные и под это не хватает выделенки. Вот ищу способ частями делать и пока не нашел(
Например если нужны данные, а запрос на статистику идёт долго, то, как решение, рассчитать сначала стату, затем куда-нибудь положить. Решили в представление. Т.к. вчерашняя стата бизнес устраивает, ночью делать рефреш
Выставить max_parallel_workers_per_gather в 0.
Тем самым запретить параллельное выполнение запросов, т.к. ошибка именно из недр dynamic shared memory инфраструктуры параллельного выполнения запросов.
Т.е. вы монтируете диск в память...
Еще раз сначала, вы в СУБД материализуете таблицу, т.е. сохраняете ее на диск, а не держите в памяти, а затем диск на который материализуете, размещаете в памяти?! Зачем?..