Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
В БД есть таблица на 1 млн. записей. col1 - столбец, по которому выполняется сортировка. col2-список столбца, по которому задается условие с использованием like.
Пишу запрос типа:
select top 100 список_столбцов from имя_таблицы where col1 not in (select top 0 col1 from имя_таблицы order by col1) and col2 like '%ГГШГШСнГ%' order by col1.
Проблема в том, что при добавлении like SQL Server начинает жрать память, причем очень быстро. В чем причина понять не могу( Если кто сталкивался с чем-то подобным, подскажите пзл.
8 дек 11, 11:36    [11727577]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
select top 0
Guest
medea
В БД есть таблица на 1 млн. записей. col1 - столбец, по которому выполняется сортировка. col2-список столбца, по которому задается условие с использованием like.
Пишу запрос типа:
select top 100 список_столбцов from имя_таблицы where col1 not in (select top 0 col1 from имя_таблицы order by col1) and col2 like '%ГГШГШСнГ%' order by col1.
Проблема в том, что при добавлении like SQL Server начинает жрать память, причем очень быстро. В чем причина понять не могу( Если кто сталкивался с чем-то подобным, подскажите пзл.



что это?????
вы хоть понимаете что пишите???
8 дек 11, 11:42    [11727641]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Ну, дык это нормальное поведение сервера - есть свободная память и он не ограничен в своих аппетитах - сервер старается данные закешировать.
И никакая это не утечка. Это результат сканирования вашей таблицы.
8 дек 11, 11:44    [11727667]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
select top 0,

Да, конечно понимаю. У меня есть приложение, написанное на C#. Есть datagridview, данные для которого загружаются из БД в режиме JIT. постранично. всего 2 страницы. каждая страница содержит по 100 записей. так вот чтобы исключить выбор записей повторно, я пишу col1 not in (select top 0 col1 from имя_таблицы order by col1). но это условие можно исключить. можно оставить просто
select top 100 список_столбцов from имя_таблицы where col2 like '%ГГШГШСнГ%' order by col1
все равно память отжирается
8 дек 11, 11:52    [11727764]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Glory
Member

Откуда:
Сообщений: 104751
medea
все равно память отжирается

И что в этом удивительного ?
Сервер забирает память сверх разрешенного ему лимита что ли ?
8 дек 11, 11:54    [11727784]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]

Guest
а потом мне запрещают ковыряться в носу спрашивают почему программы криво написаны... (((
8 дек 11, 11:56    [11727806]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
Glory,

1. где можно посмотреть этот лимит, если не секрет?
2. расходуемую память смотрю через Диспечер задач, объем потребляемой памяти все время растет, пока в итоге все не виснет и приходиться перезапускать комп.
8 дек 11, 11:57    [11727830]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Eagle_84
Member

Откуда: Москва
Сообщений: 1535
medea
Glory,

1. где можно посмотреть этот лимит, если не секрет?
2. расходуемую память смотрю через Диспечер задач, объем потребляемой памяти все время растет, пока в итоге все не виснет и приходиться перезапускать комп.


1) в настройках самого сервера (sp_configure)
2) при 32х диспетчер задач не покажет, сколько памяти "кушается"
select cntr_value/1024 [memory] from sys.sysperfinfo 
where counter_name = 'Total Server Memory (KB)'
8 дек 11, 11:59    [11727863]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Glory
Member

Откуда:
Сообщений: 104751
medea
1. где можно посмотреть этот лимит, если не секрет?

в настройках сервера разумеется
8 дек 11, 12:00    [11727872]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
medea
select top 0,

Да, конечно понимаю. У меня есть приложение, написанное на C#. Есть datagridview, данные для которого загружаются из БД в режиме JIT. постранично. всего 2 страницы. каждая страница содержит по 100 записей. так вот чтобы исключить выбор записей повторно, я пишу col1 not in (select top 0 col1 from имя_таблицы order by col1). но это условие можно исключить. можно оставить просто
select top 100 список_столбцов from имя_таблицы where col2 like '%ГГШГШСнГ%' order by col1
все равно память отжирается
Какой смысл Вы вкладываете в SELECT TOP 0, можно полюбопытствовать?
Просто очень интересно стало...
8 дек 11, 12:04    [11727913]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
iap,

запрос скопирован из VS 2008 там там может стоять любое число. для первых 100 страниц это 0, дальше 100 и т.д.
8 дек 11, 12:06    [11727944]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
medea,

сорри, не страниц, первых 100 записей
8 дек 11, 12:08    [11727972]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Eagle_84
Member

Откуда: Москва
Сообщений: 1535
medea,
я все равно не понимаю суть этого запроса...
8 дек 11, 12:13    [11728032]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Eagle_84
medea,
я все равно не понимаю суть этого запроса...
Имеется в виду, что при выборки первых 100 записей венутся первые 100 из всех возможных.
При выборке следующей сотни строк клиент в подзапросе сформирует TOP 100 и т.д.
Так что каждая выборка не будет включать в себя все предыдущие.
Если, правда, туда кто-нибудь ещё чего-нибудь не добавит за это время.
Или не удалит...
8 дек 11, 12:22    [11728117]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
iap
Member

Откуда: Москва
Сообщений: 47144
Опечатки поправил:
iap
Eagle_84
medea,
я все равно не понимаю суть этого запроса...
Имеется в виду, что при выборке первых 100 записей вернутся первые 100 из всех возможных.
При выборке следующей сотни строк клиент в подзапросе сформирует TOP 100 и т.д.
Так что каждая выборка не будет включать в себя все предыдущие.
Если, правда, туда кто-нибудь ещё чего-нибудь не добавит за это время.
Или не удалит...
8 дек 11, 12:23    [11728126]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
Eagle_84,

можно и через process explorer.
причем значение в working set process explorer увеличивается. как с этим бороться не понимаю. и это только после добавление к запросу like

К сообщению приложен файл. Размер - 21Kb
8 дек 11, 12:25    [11728146]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Eagle_84
Member

Откуда: Москва
Сообщений: 1535
medea
Eagle_84,

можно и через process explorer.
причем значение в working set process explorer увеличивается. как с этим бороться не понимаю. и это только после добавление к запросу like


да много через что можно, можно и счетчики использовать, можно как выше запрос приводил через скуль.
не в этом дело, уже было написано, что память будет съедаться столько, сколько можно :)

посмотрите план запроса при like и без него...
8 дек 11, 12:32    [11728235]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 66
medea
select top 0,

Да, конечно понимаю. У меня есть приложение, написанное на C#. Есть datagridview, данные для которого загружаются из БД в режиме JIT. постранично. всего 2 страницы. каждая страница содержит по 100 записей. так вот чтобы исключить выбор записей повторно, я пишу col1 not in (select top 0 col1 from имя_таблицы order by col1). но это условие можно исключить. можно оставить просто
select top 100 список_столбцов from имя_таблицы where col2 like '%ГГШГШСнГ%' order by col1
все равно память отжирается

а если будет 10 страниц? не надо так делать.

DECLARE @iPage int = 1
DECLARE @iRows int = 100

SELECT T.* FROM (
   SELECT RN = ROW_NUMBER () OVER (ORDER BY TAB.COL), * FROM TAB) T
 WHERE T.RN BETWEEN (@iRows * (@iPage - 1) + 1) AND (@iRows * @iPage) 
8 дек 11, 16:33    [11730732]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
medea
Member

Откуда:
Сообщений: 12
Ruiner,

Спасибо, но на записях с номерами строк в диапазоне [999900 - 1000000]. опять все по-старому работает, т.е. запрос выполняется очень долго.
8 дек 11, 17:27    [11731306]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
g-collector
Guest
medea,

все-то у вас memleaks куда ни плюнь.
план смотрел кто-нибудь?
нет ли там каких-нибудь таких "memleaks", которые называются table spool и merge, например?
+ like чудовищный.
автор
999900 - 1000000

кэш сбросьте и те которые "до" еще разочек попробуйте.
8 дек 11, 21:56    [11732858]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
SIMPLicity_
Member

Откуда: (((@)))
Сообщений: 8878
Можно я чуть-чуть "подосру" в тему...

Выберите первых 200 и работайте с ними (если для Вас принципиально именно первые две страницы по 100).
Но учтите (и тут уже говорили), что если кто-то что-то добавил по Вашему условию отбора, то картина кардинально изменится. И так и так надо заново будет перестроить обе страницы. Или оставить как есть...

Про "дoхера съедает памяти" и ваще... как уже пытались сказать - "not in (select top 0 ... )" подразумевает выборку всех строк, ибо select top 0 возвратит пустой набор. Да тут ещё и "like" ... Яп на месте скуля ещё б и пива попросил, а не только всю память захавал.

Пример с "...not in (select top 0...)..." был сделан исключительно для "стандартности". Скажем так - для машин проводится крэштест.., но это же не повод проводить его самому со своей машиной :) ...

Удачи!
PS Если чо, то я натурально блондинко...
9 дек 11, 00:12    [11733454]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
Ruiner
Member

Откуда: СПб
Сообщений: 66
medea
Ruiner,

Спасибо, но на записях с номерами строк в диапазоне [999900 - 1000000]. опять все по-старому работает, т.е. запрос выполняется очень долго.

ну стоит уже показать план всё-таки.
и да, LIKE '%xxxx%' всегда приведёт к сканированию.
9 дек 11, 09:20    [11734048]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
Ruiner
medea
Ruiner,

Спасибо, но на записях с номерами строк в диапазоне [999900 - 1000000]. опять все по-старому работает, т.е. запрос выполняется очень долго.

ну стоит уже показать план всё-таки.
и да, LIKE '%xxxx%' всегда приведёт к сканированию.


а че его смотреть...

и так ясно что будет либо скан таблицы либо кластерного индекса...
9 дек 11, 10:18    [11734355]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
мимо
Guest
a по col2 индекс есть?
9 дек 11, 10:25    [11734414]     Ответить | Цитировать Сообщить модератору
 Re: утечка памяти при добавлении к select-у оператора like  [new]
SanyL
Member

Откуда: Москва
Сообщений: 4540
мимо
a по col2 индекс есть?


а толку?
9 дек 11, 10:36    [11734476]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить