Thread: Re: Размер SQL-запроса.

Re: Размер SQL-запроса.

From
Oleg Bartunov
Date:
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-1903590565-1117055754=:1721
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

Денис,

требуется больше информации. Версия, запрос, сообщения,
и что такое "ребутнулась" ?
Проблема воспроизводится или как ?
Если да, то готовь тестовый пример.


Олег
On Wed, 25 May 2005, Denis A. Egorov wrote:

> Доброго времени суток!
>
> Вот сегодня столкнулся с проблемой, есть таблица(большая), мне нужно
> сделать вот такой вот select:
>
> selec id from test whwre id not in ( очень много),
>
> выполнив его, ребутнулась вся база, запрос не выполнился, в общем пипец.
> Хотя тоже самое на mysql выполняется без проблем.
>
> Вот я и думаю может быть где-то ограничения какие либо стоят?
>
>
> С уважением.
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-1903590565-1117055754=:1721--

Re: Размер

From
"Denis A. Egorov"
Date:
Здравствуйте, Oleg Bartunov!

Да, сори.

Написал, отправил, а потом уже только подумал что мало проблему
описал. Верчером дело было...

Да, проблема воспроизводится, так сказать элементарно.


Вот версия postgresql:

PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4

Это о входящих данных:

 head -c 100 big.sql
SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000', '10001', '10002

 wc sql_big.sql
1   14091  122660 sql_big.sql



psql -U test test < big.sql
сервер неожиданно прервал соединение
        Скорее всего это означает что сервер завершил работу со сбоем
        до или в течение обслуживания запроса.
подсоединение к серверу было потеряно


в логах:

/kernel: pid 26672 (postgres), uid 70: exited on signal 10 (core dumped)
postgres[26669]: [211-1] WARNING:  terminating connection because of crash of another server process
postgres[26669]: [211-2] DETAIL:  The postmaster has commanded this server process to roll back the current transaction
andexit, beca use another server 

postgres[26669]: [211-3]  process exited abnormally and possibly corrupted shared memory.
postgres[26669]: [211-4] HINT:  In a moment you should be able to reconnect to the database and repeat your command.
postgres[26639]: [210-1] WARNING:  terminating connection because of crash of another server processa
postgres[26639]: [210-2] DETAIL:  The postmaster has commanded this server process to roll back the current transaction
andexit, beca use another server 

и так по ходу для всех процесов postgres, и в самом конце

postgres[26677]: [213-1] FATAL:  the database system is starting up
postgres[26687]: [213-1] FATAL:  the database system is starting up



Есть у меня другая машина, с другим postgresq:

PostgreSQL 7.4.7 on i386-portbld-freebsd4.11, compiled by GCC 2.95.4

так вот при выполнении этого же самого sql выдаёт вот это:

ERROR:  expression too complex
DETAIL:  Nesting depth exceeds maximum expression depth 10000.
HINT:  Increase the configuration parameter "max_expr_depth".

но, всё остаётся работать...



On Thu, May 26, 2005 at 01:15:54AM +0400, you wrote:

-> Денис,
->
-> требуется больше информации. Версия, запрос, сообщения,
-> и что такое "ребутнулась" ?
-> Проблема воспроизводится или как ?
-> Если да, то готовь тестовый пример.
->
->
-> Олег
-> On Wed, 25 May 2005, Denis A. Egorov wrote:
->
-> >Доброго времени суток!
-> >
-> >Вот сегодня столкнулся с проблемой, есть таблица(большая), мне нужно
-> >сделать вот такой вот select:
-> >
-> >selec id from test whwre id not in ( очень много),
-> >
-> >выполнив его, ребутнулась вся база, запрос не выполнился, в общем пипец.
-> >Хотя тоже самое на mysql выполняется без проблем.
-> >
-> >Вот я и думаю может быть где-то ограничения какие либо стоят?
-> >
-> >
-> >С уважением.
-> >
->
->     Regards,
->         Oleg
-> _____________________________________________________________
-> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
-> Sternberg Astronomical Institute, Moscow University (Russia)
-> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
-> phone: +007(095)939-16-83, +007(095)939-23-83


С уважением.
--
Denis A. Egorov

Re: Размер

From
"Alexander M. Pravking"
Date:
On Thu, May 26, 2005 at 11:49:34AM +0300, Denis A. Egorov wrote:
> Вот версия postgresql:
>
> PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4
>
> Это о входящих данных:
>
>  head -c 100 big.sql
> SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000', '10001', '10002
>
>  wc sql_big.sql
> 1   14091  122660 sql_big.sql

У тебя в WHERE только NOT IN или ещё что-то?
Postgres иногда не очень умно делает эквивалентные преобразования
булевых выражений, в определённых случаях в результате они получаются
просто конскими.

Как решение могу посоветовать создание временной таблицы (скажем,
denied), куда сложить нужные id'ы и заменить твой NOT IN на
NOT IN (SELECT id FROM test) или на NOT EXISTS (SELECT 1 FROM denied d
WHERE d.id = test.id);


--
Fduch M. Pravking

Re: Размер SQL-запроса.

From
Oleg Bartunov
Date:
This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-992951867-1117104036=:1721
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

Денис,

пришли откуда можно взять big.sql и я его проверю на своей машине.
А тебе советую обновится до 8.0.3, там IN точно оптимизированны или/и
посмотреть наш модуль contrib/intarray, который тебе обеспечит счастье :)


Олег
On Thu, 26 May 2005, Denis A. Egorov wrote:

> Здравствуйте, Oleg Bartunov!
>
> Да, сори.
>
> Написал, отправил, а потом уже только подумал что мало проблему
> описал. Верчером дело было...
>
> Да, проблема воспроизводится, так сказать элементарно.
>
>
> Вот версия postgresql:
>
> PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4
>
> Это о входящих данных:
>
> head -c 100 big.sql
> SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000', '10001', '10002
>
> wc sql_big.sql
> 1   14091  122660 sql_big.sql
>
>
>
> psql -U test test < big.sql
> сервер неожиданно прервал соединение
>        Скорее всего это означает что сервер завершил работу со сбоем
>        до или в течение обслуживания запроса.
> подсоединение к серверу было потеряно
>
>
> в логах:
>
> /kernel: pid 26672 (postgres), uid 70: exited on signal 10 (core dumped)
> postgres[26669]: [211-1] WARNING:  terminating connection because of crash of another server process
> postgres[26669]: [211-2] DETAIL:  The postmaster has commanded this server process to roll back the current
transactionand exit, beca use another server 
>
> postgres[26669]: [211-3]  process exited abnormally and possibly corrupted shared memory.
> postgres[26669]: [211-4] HINT:  In a moment you should be able to reconnect to the database and repeat your command.
> postgres[26639]: [210-1] WARNING:  terminating connection because of crash of another server processa
> postgres[26639]: [210-2] DETAIL:  The postmaster has commanded this server process to roll back the current
transactionand exit, beca use another server 
>
> и так по ходу для всех процесов postgres, и в самом конце
>
> postgres[26677]: [213-1] FATAL:  the database system is starting up
> postgres[26687]: [213-1] FATAL:  the database system is starting up
>
>
>
> Есть у меня другая машина, с другим postgresq:
>
> PostgreSQL 7.4.7 on i386-portbld-freebsd4.11, compiled by GCC 2.95.4
>
> так вот при выполнении этого же самого sql выдаёт вот это:
>
> ERROR:  expression too complex
> DETAIL:  Nesting depth exceeds maximum expression depth 10000.
> HINT:  Increase the configuration parameter "max_expr_depth".
>
> но, всё остаётся работать...
>
>
>
> On Thu, May 26, 2005 at 01:15:54AM +0400, you wrote:
>
> -> Денис,
> ->
> -> требуется больше информации. Версия, запрос, сообщения,
> -> и что такое "ребутнулась" ?
> -> Проблема воспроизводится или как ?
> -> Если да, то готовь тестовый пример.
> ->
> ->
> -> Олег
> -> On Wed, 25 May 2005, Denis A. Egorov wrote:
> ->
> -> >Доброго времени суток!
> -> >
> -> >Вот сегодня столкнулся с проблемой, есть таблица(большая), мне нужно
> -> >сделать вот такой вот select:
> -> >
> -> >selec id from test whwre id not in ( очень много),
> -> >
> -> >выполнив его, ребутнулась вся база, запрос не выполнился, в общем пипец.
> -> >Хотя тоже самое на mysql выполняется без проблем.
> -> >
> -> >Вот я и думаю может быть где-то ограничения какие либо стоят?
> -> >
> -> >
> -> >С уважением.
> -> >
> ->
> ->     Regards,
> ->         Oleg
> -> _____________________________________________________________
> -> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
> -> Sternberg Astronomical Institute, Moscow University (Russia)
> -> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
> -> phone: +007(095)939-16-83, +007(095)939-23-83
>
>
> С уважением.
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-992951867-1117104036=:1721--

Re: Размер

From
"Denis A. Egorov"
Date:
Здравствуйте, Alexander M. Pravking!


Нет, больше ничего нет, я привёл реальный пример.

Да, согласен, как вариант, но это есть костыли...

Думаю что буду переходить на 8.3, как советует Олег.


On Thu, May 26, 2005 at 02:25:28PM +0400, you wrote:

-> On Thu, May 26, 2005 at 11:49:34AM +0300, Denis A. Egorov wrote:
-> > Вот версия postgresql:
-> >
-> > PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4
-> >
-> > Это о входящих данных:
-> >
-> >  head -c 100 big.sql
-> > SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000', '10001', '10002
-> >
-> >  wc sql_big.sql
-> > 1   14091  122660 sql_big.sql
->
-> У тебя в WHERE только NOT IN или ещё что-то?
-> Postgres иногда не очень умно делает эквивалентные преобразования
-> булевых выражений, в определённых случаях в результате они получаются
-> просто конскими.
->
-> Как решение могу посоветовать создание временной таблицы (скажем,
-> denied), куда сложить нужные id'ы и заменить твой NOT IN на
-> NOT IN (SELECT id FROM test) или на NOT EXISTS (SELECT 1 FROM denied d
-> WHERE d.id = test.id);
->
->
-> --
-> Fduch M. Pravking
->
-> ---------------------------(end of broadcast)---------------------------
-> TIP 1: subscribe and unsubscribe commands go to majordomo@postgresql.org
->

--
Denis A. Egorov

Re: Размер

From
"Denis A. Egorov"
Date:
Олег,

могу выслать на мыло, или лучше дать URL?

Да, так буду и делать, я изначально хотел ставить 8.0.3, но версия из
портов не собралась, а сроки горели и пришлось поставить 7-ку...

Теперь вот другой вопрос как наиболле безболезненно и _быстро_ перехать с 7-ки на 8-ку?

Насколько я понял, нужно делатьполный дамп и его вставлеть?

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


On Thu, May 26, 2005 at 02:40:36PM +0400, you wrote:

-> Денис,
->
-> пришли откуда можно взять big.sql и я его проверю на своей машине.
-> А тебе советую обновится до 8.0.3, там IN точно оптимизированны или/и
-> посмотреть наш модуль contrib/intarray, который тебе обеспечит счастье :)
->
->
-> Олег
-> On Thu, 26 May 2005, Denis A. Egorov wrote:
->
-> >Здравствуйте, Oleg Bartunov!
-> >
-> >Да, сори.
-> >
-> >Написал, отправил, а потом уже только подумал что мало проблему
-> >описал. Верчером дело было...
-> >
-> >Да, проблема воспроизводится, так сказать элементарно.
-> >
-> >
-> >Вот версия postgresql:
-> >
-> >PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4
-> >
-> >Это о входящих данных:
-> >
-> >head -c 100 big.sql
-> >SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000',
-> >'10001', '10002
-> >
-> >wc sql_big.sql
-> >1   14091  122660 sql_big.sql
-> >
-> >
-> >
-> >psql -U test test < big.sql
-> >сервер неожиданно прервал соединение
-> >       Скорее всего это означает что сервер завершил работу со сбоем
-> >       до или в течение обслуживания запроса.
-> >подсоединение к серверу было потеряно
-> >
-> >
-> >в логах:
-> >

[cut]

-> >С уважением.
-> >
->
->     Regards,
->         Oleg
-> _____________________________________________________________
-> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
-> Sternberg Astronomical Institute, Moscow University (Russia)
-> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
-> phone: +007(095)939-16-83, +007(095)939-23-83


С уважением.
--
Denis A. Egorov

Re: Размер

From
Oleg Bartunov
Date:
  This message is in MIME format.  The first part should be readable text,
  while the remaining parts are likely unreadable without MIME-aware tools.

---559023410-1296255701-1117108504=:1721
Content-Type: TEXT/PLAIN; charset=koi8-r; format=flowed
Content-Transfer-Encoding: 8BIT

On Thu, 26 May 2005, Denis A. Egorov wrote:

> Олег,
>
> могу выслать на мыло, или лучше дать URL?

URL лучше.

>
> Да, так буду и делать, я изначально хотел ставить 8.0.3, но версия из
> портов не собралась, а сроки горели и пришлось поставить 7-ку...
>
> Теперь вот другой вопрос как наиболле безболезненно и _быстро_ перехать с 7-ки на 8-ку?
>
> Насколько я понял, нужно делатьполный дамп и его вставлеть?
>
> Простым копированием этого ж не сделать?
>

да, конечно. Полный дамп или поставь слонов (Slony) и все сделаешь в online
без downtime. Мы так и сделали в свое время, заодно слонов пастись научишься :)

>
> On Thu, May 26, 2005 at 02:40:36PM +0400, you wrote:
>
> -> Денис,
> ->
> -> пришли откуда можно взять big.sql и я его проверю на своей машине.
> -> А тебе советую обновится до 8.0.3, там IN точно оптимизированны или/и
> -> посмотреть наш модуль contrib/intarray, который тебе обеспечит счастье :)
> ->
> ->
> -> Олег
> -> On Thu, 26 May 2005, Denis A. Egorov wrote:
> ->
> -> >Здравствуйте, Oleg Bartunov!
> -> >
> -> >Да, сори.
> -> >
> -> >Написал, отправил, а потом уже только подумал что мало проблему
> -> >описал. Верчером дело было...
> -> >
> -> >Да, проблема воспроизводится, так сказать элементарно.
> -> >
> -> >
> -> >Вот версия postgresql:
> -> >
> -> >PostgreSQL 7.4.8 on i386-portbld-freebsd4.10, compiled by GCC 2.95.4
> -> >
> -> >Это о входящих данных:
> -> >
> -> >head -c 100 big.sql
> -> >SELECT id FROM test WHERE id NOT IN ( '10', '100', '1000', '10000',
> -> >'10001', '10002
> -> >
> -> >wc sql_big.sql
> -> >1   14091  122660 sql_big.sql
> -> >
> -> >
> -> >
> -> >psql -U test test < big.sql
> -> >сервер неожиданно прервал соединение
> -> >       Скорее всего это означает что сервер завершил работу со сбоем
> -> >       до или в течение обслуживания запроса.
> -> >подсоединение к серверу было потеряно
> -> >
> -> >
> -> >в логах:
> -> >
>
> [cut]
>
> -> >С уважением.
> -> >
> ->
> ->     Regards,
> ->         Oleg
> -> _____________________________________________________________
> -> Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
> -> Sternberg Astronomical Institute, Moscow University (Russia)
> -> Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
> -> phone: +007(095)939-16-83, +007(095)939-23-83
>
>
> С уважением.
>

     Regards,
         Oleg
_____________________________________________________________
Oleg Bartunov, sci.researcher, hostmaster of AstroNet,
Sternberg Astronomical Institute, Moscow University (Russia)
Internet: oleg@sai.msu.su, http://www.sai.msu.su/~megera/
phone: +007(095)939-16-83, +007(095)939-23-83
---559023410-1296255701-1117108504=:1721--