Thread: Re: Размер SQL-запроса.
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--
Здравствуйте, 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
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
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--
Здравствуйте, 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
Олег, могу выслать на мыло, или лучше дать 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
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--