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

Откуда:
Сообщений: 106
Сервер 2008 R2 (16гигов оперативы).
БД SQL 2008 R2

Проблема в том что база съедает абсолютно всю оперативную память.
Смущает не тот факт что памяти мало, а то чем она забивается.
Потому как последующие запросы к БД начинают использовать файл временной БД.

Самые большие таблицы

таблица, данные, индексы
Prices 95,168 KB 170,336 KB
AccountsDaily 822,104 KB 1,967,664 KB
AccountsOperations 807,112 KB 1,211,512 KB
ReplicatorAccountsOperations 4,658,448 KB 16 KB
ReplicatorPrices 343,200 KB 16 KB
ReplicatorAccounts 70,632 KB 16 KB
ReplicatorAccountsDaily 669,136 KB 16 KB

Replicator... - почти не используется (как таблица переброски данных в основные таблицы)
Но и транкейтить их нельзя, можно только удалить данные.
Даже если эти таблицы транкейтить, память не уменшится.

Этими командами происходит очистка, но в таск менеджере по прежнему показывает что вся память забита.
DBCC DROPCLEANBUFFERS; 
DBCC FREESESSIONCACHE
DBCC FREEPROCCACHE

SELECT COUNT(*) AS cached_pages_count,
name AS BaseTableName, IndexName,
IndexTypeDesc
FROM sys.dm_os_buffer_descriptors AS bd
INNER JOIN
(
SELECT s_obj.name, s_obj.index_id,
s_obj.allocation_unit_id, s_obj.OBJECT_ID,
i.name IndexName, i.type_desc IndexTypeDesc
FROM
(
SELECT OBJECT_NAME(OBJECT_ID) AS name,
index_id ,allocation_unit_id, OBJECT_ID
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.hobt_id
AND (au.type = 1 OR au.type = 3)
UNION ALL
SELECT OBJECT_NAME(OBJECT_ID) AS name,
index_id, allocation_unit_id, OBJECT_ID
FROM sys.allocation_units AS au
INNER JOIN sys.partitions AS p
ON au.container_id = p.partition_id
AND au.type = 2
) AS s_obj
LEFT JOIN sys.indexes i ON i.index_id = s_obj.index_id
AND i.OBJECT_ID = s_obj.OBJECT_ID ) AS obj
ON bd.allocation_unit_id = obj.allocation_unit_id
WHERE database_id = DB_ID()
GROUP BY name, index_id, IndexName, IndexTypeDesc
ORDER BY cached_pages_count DESC;


Так вот, может я напрасно загоняюсь и сама база там все четко делает?
23 авг 11, 12:53    [11163244]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
truper
Потому как последующие запросы к БД начинают использовать файл временной БД.
А как связаны память, ее возможный недостаток и использование tempdb?
23 авг 11, 12:55    [11163275]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Проблема в том что база съедает абсолютно всю оперативную память.

Проблема будет, если сервер начнет использовать память в размере, запрещенном ему
А если вы разрешили ему использовать память, то проблемы нет
23 авг 11, 12:56    [11163293]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
truper
Проблема в том что база съедает абсолютно всю оперативную память.
Вообще-то сервер берет памяти столько, сколько ему позволено.
truper
Этими командами происходит очистка, но в таск менеджере по прежнему показывает что вся память забита.
В описании какой из этих трех команд вы прочитали, что она заставляет сервер отдавать память операционной системе?
23 авг 11, 12:56    [11163299]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

Откуда:
Сообщений: 106
Гавриленко Сергей Алексеевич
truper
Потому как последующие запросы к БД начинают использовать файл временной БД.
А как связаны память, ее возможный недостаток и использование tempdb?


Мне кажется что это както связано, почему бы например временные таблицы не создавать в памяти?
23 авг 11, 12:57    [11163305]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Мне кажется что это както связано, почему бы например временные таблицы не создавать в памяти?

Почему бы все таблицы тогда не создавать в памяти ?
23 авг 11, 12:58    [11163324]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
truper
Мне кажется что это както связано, почему бы например временные таблицы не создавать в памяти?
Чтобы вставив туда стопиццот миллионов записей намеренно или по ошибке, не ронять сервер. Я уже молчу, что надо еще как-то в них транзакционную целостность поддерживать.
23 авг 11, 12:59    [11163325]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

Откуда:
Сообщений: 106
В описании какой из этих трех команд вы прочитали, что она заставляет сервер отдавать память операционной системе?

Честно говоря не читал.

Поставим вопрос с другой стороны. Почему база съедает порядка 14гигабай памяти, хотя таблиц и индексов суммарно меньше?
23 авг 11, 12:59    [11163335]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
komrad
Member

Откуда:
Сообщений: 5741
truper
Сервер 2008 R2 (16гигов оперативы).
БД SQL 2008 R2

Проблема в том что база съедает абсолютно всю оперативную память.
Смущает не тот факт что памяти мало, а то чем она забивается.


так это ведь сервер баз данных, не правда ли?
и это нормально, что для своей работы он потребляет выделенную ему память.
а чем она "забивается" зависит от запросов, которыми оперирует клиент или оператор...

выполните это

SELECT count(*)AS cached_pages_count, count(*)/128  'Size (Mb)'
    ,CASE database_id 
        WHEN 32767 THEN 'ResourceDb' 
        ELSE db_name(database_id) 
        END AS Database_name
FROM sys.dm_os_buffer_descriptors
GROUP BY db_name(database_id) ,database_id
ORDER BY cached_pages_count DESC
23 авг 11, 13:00    [11163342]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

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

pages size
205107 1602 DB1
22602 176 DB2
3074 24 tempdb
535 4 ResourceDb
....
23 авг 11, 13:01    [11163360]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Почему база съедает порядка 14гигабай памяти, хотя таблиц и индексов суммарно меньше?

Потому что вы разрешили ему использовать 14гб ?
23 авг 11, 13:01    [11163363]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

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

Разрешил все что есть :)
23 авг 11, 13:03    [11163383]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Glory
Member

Откуда:
Сообщений: 104751
truper
Разрешил все что есть :)

И что тогда сервер сделал неправильно, если вы ему разрешили использовать эту память ?
23 авг 11, 13:05    [11163396]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
komrad
Member

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

и это

select @@servername,counter_name,cntr_value/1024 [memory_sqlserver, mb] from master..sysperfinfo 
where counter_name in ( 'Total Server Memory (KB)','Target Server Memory (KB)')
go
select name,value_in_use from sys.configurations where name in ('min server memory (MB)','max server memory (MB)')
go
23 авг 11, 13:07    [11163407]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
SamMan
Member

Откуда: Moscow
Сообщений: 759
truper
Разрешил все что есть


А он понял это буквально и все что есть забрал? Тащите его в эту ветку, сечас мы ему атата сделаем, ишь - разошелся.
23 авг 11, 13:08    [11163414]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

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

1. Я хочу знать на что была потрачена эта оперативная память.
2. Я хочу по мере необходимости освобождать эту память по частям (индексы, запросы, ...)
3. В конечном счете я хочу узнать а хватает ли базе этой памяти, или она ее использует с избытком.
23 авг 11, 13:08    [11163420]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
И заодно расскажите, где вы увидели, что сервер "съедает порядка 14гигабай памяти"?
23 авг 11, 13:09    [11163431]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

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

...\SQL2008R2X64 Target Server Memory (KB) 14573
...\SQL2008R2X64 Total Server Memory (KB) 14387


min server memory (MB) 16
max server memory (MB) 99999999
23 авг 11, 13:09    [11163437]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

Откуда:
Сообщений: 106
Гавриленко Сергей Алексеевич,

пост выше
либо по таск менеджеру, ось около двух, остальное база
23 авг 11, 13:10    [11163444]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
truper
Гавриленко Сергей Алексеевич,

пост выше
либо по таск менеджеру, ось около двух, остальное база
В общем, ваши цифры по использованию памяти не сходятся, потому что вы чистите все кеши. Выше был скрипт, который показывает выделение памяти в буффер-пуле для каждй из баз. Вот скрипт, который показывает, под какие именно объекты выделена память (в разрезе каждой из баз выполнять):

select
       count(*)as cached_pages_count,
       obj.name as objectname,
       ind.name as indexname,
       obj.index_id as indexid
from sys.dm_os_buffer_descriptors as bd
    inner join
    (
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.hobt_id
                    and (au.type = 1 or au.type = 3)
        union all
        select       object_id as objectid,
                           object_name(object_id) as name,
                           index_id,allocation_unit_id
        from sys.allocation_units as au
            inner join sys.partitions as p
                on au.container_id = p.partition_id
                    and au.type = 2
    ) as obj
        on bd.allocation_unit_id = obj.allocation_unit_id
left outer join sys.indexes ind 
  on  obj.objectid = ind.object_id
 and  obj.index_id = ind.index_id
where bd.database_id = db_id()
  and bd.page_type in ('data_page', 'index_page')
group by obj.name, ind.name, obj.index_id
order by cached_pages_count desc
23 авг 11, 13:13    [11163472]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Glory
Member

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

1. Я хочу знать на что была потрачена эта оперативная память.
2. Я хочу по мере необходимости освобождать эту память по частям (индексы, запросы, ...)
3. В конечном счете я хочу узнать а хватает ли базе этой памяти, или она ее использует с избытком.

1.sys.dm_os_memory_objects
Returns memory objects that are currently allocated by SQL Server. sys.dm_os_memory_objects is primarily used to analyze memory use and to identify possible memory leaks.

2. Сервер сам распоряжается выделенным ему пулом памяти. Поверьте, он это делает лучше вас.

3. Память используется для множества вещей. Что именно вы понимаете под "хватает ли базе этой памяти" ?
23 авг 11, 13:15    [11163488]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
truper
1. Я хочу знать на что была потрачена эта оперативная память.
Скриптов уже надавали. Подождите, пока сервер опять наполнит буффер-пул, и узнаете.

truper
2. Я хочу по мере необходимости освобождать эту память по частям (индексы, запросы, ...)
Частями не получится, сервер сам решает, какие страницы надо вытеснять из кеша. И потом, что это еще за необходимость такая?

truper
3. В конечном счете я хочу узнать а хватает ли базе этой памяти, или она ее использует с избытком.
Это все мониторится соответствующими счетчиками производительности, в частности Buffer: Cache Hit Ratio (или как-то так).
23 авг 11, 13:15    [11163489]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
komrad
Member

Откуда:
Сообщений: 5741
Гавриленко Сергей Алексеевич
truper
3. В конечном счете я хочу узнать а хватает ли базе этой памяти, или она ее использует с избытком.
Это все мониторится соответствующими счетчиками производительности, в частности Buffer: Cache Hit Ratio (или как-то так).


+ page life expectancy
23 авг 11, 13:23    [11163564]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
komrad
Member

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

стоит глянуть стандартный отчет по памяти
23 авг 11, 13:53    [11163875]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с оперативной памятью на сервере.  [new]
truper
Member

Откуда:
Сообщений: 106
page life expectancy: ~83,000 - както много совсем
Buffer cache hit ratio: почти всегда 100% опускается до 50% при загрузке данных

Вообще как я понял, не просто разобраться в огромном числе счетчиков, нужно иметь какойто опыт.
23 авг 11, 15:11    [11164819]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить