Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
SELECT @@version
Microsoft SQL Server 2005 - 9.00.5000.00 (X64)   Dec 10 2010 10:38:40   Copyright (c) 1988-2005 Microsoft Corporation  Enterprise Edition (64-bit) on Windows NT 5.2 (Build 3790: Service Pack 2) 

Исходная: есть сервер, на нем DataBase Engine, MSAS, .Net CLR.
Проблема: при бекапе OLAP-куба на 15 Гб у пользователей .Net-сборки начинают появляться ошибки "Не хватает памяти".

Скрипт бекапа:
<Backup xmlns="http://schemas.microsoft.com/analysisservices/2003/engine">
  <Object>
    <DatabaseID>OlapDatabase</DatabaseID>
  </Object>
  <File>G:\SQLBackup\Olap\OlapDatabase.abf</File>
  <AllowOverwrite>true</AllowOverwrite>
  <ApplyCompression>false</ApplyCompression>
</Backup>

Попытка диагностики, 4 счетчика:
Memory Available MBytes исходное значение 8500 Мб
MSAS2005:Memory Memory Usage KB исходное значение 4 189 000 Кб
SQL Server:Memory Manager TotalServerMemory (KB) исходное значение 48 300 000 Кб
.Net CLR Memory # Total reserved bytes исходное значение 2,6625e+010

Запускаю бекап куба.

Постепенно сжирается вся свободная память, первый счетчик падает до уровня 50-100 Мб. Потом начинается уменьшаться счетчик памяти SQL Server, опускается до 44.5 Гб, и под финиш бекапа появляются провалы счетчика .Net CLR Memory, что сразу приводит к росту числа сбоев .Net CLR. Но файл бекапа при этом весит порядка 13 Гб.
Счетчик MSAS2005:Memory Memory Usage KB остается неизменным всё это время.

Собственно вопрос, почему всё происходит именно так, почему система при нехватке памяти не лезет в своп, и почему она бОльшую часть бекапа хранит в памяти и не сваливает на диск?
И самый интересный вопрос, под .Net CLR выделяется свое адресное пространство, как это следует из счетчиков или она входит в адресное пространство SQL Server?
28 ноя 11, 16:33    [11672535]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Причем при бекапировании обычной базы весом 17 Гб ничего подобного не наблюдается, память системы не затрагивается вообще, очевидно, всё проходит за счет памяти выделенной сиквел серверу.
Почему же тогда бекап MSAS делается так бестолково?
28 ноя 11, 17:11    [11672984]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Проверил эту же ситуацию на другом сервере и другом кубе. Картина та же, бекап OLAP начинает жрать свободную память системы, а не выделенную под это память MSAS, или, в крайнем случае, сиквел сервера. Только на этом сервере памяти свободной оказалось больше, а куб меньше, поэтому до борьбы за память дело не дошло, бекап сделался и вернул системе занятую память.
29 ноя 11, 08:58    [11675382]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
Oblom
Картина та же, бекап OLAP начинает жрать свободную память системы, а не выделенную под это память MSAS

А почему бы и нет? Все выглядит логично. Зачем очищать кэш от данных, если есть возможность использовать свободную память?
В любом случае, у SSAS есть настройки, которыми вы можете регулировать используемую службой память (TotalMemoryLimit)

Oblom
или, в крайнем случае, сиквел сервера

С чего бы это SSAS стал использовать память MSSQL?
Это две службы, которые никак не зависят друг от друга.
29 ноя 11, 10:05    [11675589]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Критик
В любом случае, у SSAS есть настройки, которыми вы можете регулировать используемую службой память (TotalMemoryLimit)

Настройки MSAS следующие:
Memory \ LowMemoryLimit 3%
Memory \ TotalMemoryLimit 5%
при размере памяти 64 Гб

Только вот счетчик MSAS 2005:Memory Memory Usage KB во время бекапа никак не растет, а свободная память системы отжирается. Создается впечатление, что бекап создается сторонним процессом, который использует свободную память системы, а не память выделенную под MSAS

Критик
С чего бы это SSAS стал использовать память MSSQL?
Это две службы, которые никак не зависят друг от друга.


Он начинает её использовать, когда свободная память системы заканчивается, то есть начинает отбирать её у сиквела, вместо того, чтобы лезть в своп.
29 ноя 11, 10:55    [11675871]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Критик
Member

Откуда: Москва / Калуга
Сообщений: 35396
Блог
Oblom
Он начинает её использовать, когда свободная память системы заканчивается, то есть начинает отбирать её у сиквела, вместо того, чтобы лезть в своп.

Выглядит логично если у SQL Server стоит в настройках динамическое выделение памяти.

Если такая ситуация вам мешает, то возможно стоит отказаться от резервирования многомерной базы, т.к. процессинг куба из хранилища данных займет не намного больше времени.

Или сначала попробовать поставить 2507769 Cumulative update package 3 (CU3) for SQL Server 2005 Service Pack 4
29 ноя 11, 12:17    [11676624]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Oblom
Создается впечатление, что бекап создается сторонним процессом, который использует свободную память системы, а не память выделенную под MSAS.

Сейчас мониторил процесс с помощью ProcessExplorer-а, сожралось памяти порядка 9 гигов, но ни в одном процессе в PE это не отобразилось, то есть кто жрет память совершенно непонятно!

В MSAS 2000, судя по докам за это отвечала утилита msmdarch, но видимо в MSAS 2005 это переделали, поскольку в PE она в процессе бекапа не присутствовала.
29 ноя 11, 12:30    [11676732]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Volochkova
Member

Откуда:
Сообщений: 2321
Критик
С чего бы это SSAS стал использовать память MSSQL?
Это две службы, которые никак не зависят друг от друга.


Если у MS SQL память выставлена динамически и она ему ненужна, то по хорошему он должен поделиться
30 ноя 11, 07:10    [11681194]     Ответить | Цитировать Сообщить модератору
 Re: Почему бекап OLAP жрет память .Net CLR?  [new]
Oblom
Member

Откуда: Moscow Square
Сообщений: 635
Volochkova
Если у MS SQL память выставлена динамически и она ему ненужна, то по хорошему он должен поделиться


Так он и делится! Только памятью, которая отведена .Net CLR, в результате чего всем пользователям .Net CLR выскакивает радостное окошко "Чувак, памяти на сервере больше нет, так что ты не обессудь".
30 ноя 11, 11:07    [11681821]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить