Устранение неполадок с памятью SQL Server - PullRequest
1 голос
/ 29 июля 2010

В настоящее время активная база данных продолжает использовать больше памяти, пока не достигнет около 5,8 ГБ, а затем начнет выдавать частые ошибки тайм-аута соединения. Я понимаю, что SQL Server спроектирован так, чтобы использовать как можно больше памяти, но он не должен выбрасывать эти ошибки. В частности, кажется, что что-то работает, что приводит к очень быстрому росту памяти примерно на 2 ГБ. В БД есть много индексов и хранимых процедур, как мне определить, кто из них отвечает?

Ответы [ 2 ]

1 голос
/ 04 августа 2010

SQL-сервер предназначен для роста и использования всей памяти в системе.Поэтому он будет делать это, выделяя память для кэша плана запросов, а также таблиц и индексов.Предполагается, что она освобождает память, когда это требуется системе, но, по моему опыту, система начнет использовать больше памяти, используя систему подкачки, и все сильно замедлится, прежде чем сервер sql начнет освобождать память, которую она хранит.

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

Вы можете найти это в счетчиках менеджера памяти perfmon сервера sql, чтобы определить, какой компонент сервера sql потребляет большую часть памяти.

Я только что столкнулся с этим и вот подробности того, как я решил проблему (ссылка) - комбинация верхних пределов памяти (sp_configure 'max server memory') + обеспечение того, чтобы кэш плана запросов не увеличивалсяслишком большой

1 голос
/ 29 июля 2010

Это не будет память как таковая: SQL Server предназначен для ее использования

Возможно, у вас длительная транзакция или что-то еще, например, загрузка, которая блокирует другие процессы.

Запустите это, чтобы увидеть, что происходит

SELECT
    p1.SPID AS blockedSPID, p2.SPID AS blockingSPID, ...
FROM 
    master..sysprocesses p1
    JOIN
    master..sysprocesses p2 ON p1.blocked = p2.spid

И когда вы говорите "увеличивается на 2 ГБ".Вы имеете в виду файл MDF или LDF?

  • LDF = длительная или открытая транзакция
  • MDF = много данных, которые генерируются / загружаются (я видел мошеннический триггер аудита)

Увеличение объема памяти на 2 ГБ приведет к вероятности того, что данные в кеше будут

...