У нас есть виртуализированная среда с использованием VMware vSphere 5.0 U1, в которой размещен наш Microsoft SQL Server и которая имеет очень низкую производительность. хост-сервером является HP DL360 G5 с xeon X5450, а дисковое пространство поступает из SAN на HP P4300 G2 с использованием SAS2 и Iscsi.
Сам сервер имеет 3 ядра с частотой 3,00 ГГц, 12 ГБ памяти и 1 ГБ / с, работает под управлением Server 2008 R2 Enterprise и SQL Server 2008 R2.
Есть три базы данных, одна - 180 ГБ, используемая для Microsoft Dynamics CRM, одна - 50 ГБ, используемая как хранилище данных, а другая - 500 МБ, используемая Document Logistics (система управления документами).
Также существует куб служб анализа и службы отчетов, работающие на одном сервере.
Использование сети и ЦП низкое, за исключением случаев, когда пакеты SSIS обновляют хранилище данных, когда ЦП иногда достигает 100%.
Память всегда исчерпана, и система сообщает о чрезмерном разбиении на страницы.
Я не уверен, поможет ли простое увеличение объема памяти для решения этой проблемы - и если да, то сколько мне следует использовать - или это больше из-за виртуализации и наличия отдельного сервера с выделенными локальными дисками.
ОБНОВЛЕНИЕ --- для баз данных задана ограниченная память, и общие ограничения сохраняются в размере 12 ГБ, все файлы находятся на одном диске, а ОС / программы на другом автоматическом росте установлены на 1 МБ, неограниченные индексы оставлены для значений по умолчанию для основной программы, но кажется, что сервер обычно медленный, предположим, что из-за памяти не настроены планы мантинентности.
Когда вы говорите, что память исчерпана, учли ли вы тот факт, что SQL будет делать это (в значительной степени) по умолчанию? Вы пробовали ограничить объем оперативной памяти, которую может принимать SQL?
Как устроена компоновка вашего диска? Разные диски для temp / log / data / backup? Вы можете запустить этот скрипт, чтобы узнать:
DECLARE @database_id int
DECLARE @database_name sysname
DECLARE @sql_string nvarchar(2000)
DECLARE @file_size TABLE
(
[database_name] [sysname] NULL,
[groupid] [smallint] NULL,
[groupname] sysname NULL,
[fileid] [smallint] NULL,
[file_size] [decimal](12, 2) NULL,
[space_used] [decimal](12, 2) NULL,
[free_space] [decimal](12, 2) NULL,
[name] [sysname] NOT NULL,
[filename] [nvarchar](260) NOT NULL
)
SELECT TOP 1 @database_id = database_id
,@database_name = name
FROM sys.databases
WHERE database_id > 0
ORDER BY database_id
WHILE @database_name IS NOT NULL
BEGIN
SET @sql_string = 'USE ' + QUOTENAME(@database_name) + CHAR(10)
SET @sql_string = @sql_string + 'SELECT
DB_NAME()
,sysfilegroups.groupid
,sysfilegroups.groupname
,fileid
,convert(decimal(12,2),round(sysfiles.size/128.000,2)) as file_size
,convert(decimal(12,2),round(fileproperty(sysfiles.name,''SpaceUsed'')/128.000,2)) as space_used
,convert(decimal(12,2),round((sysfiles.size-fileproperty(sysfiles.name,''SpaceUsed''))/128.000,2)) as free_space
,sysfiles.name
,sysfiles.filename
FROM sys.sysfiles
LEFT OUTER JOIN sys.sysfilegroups
ON sysfiles.groupid = sysfilegroups.groupid'
INSERT INTO @file_size
EXEC sp_executesql @sql_string
--Grab next database
SET @database_name = NULL
SELECT TOP 1 @database_id = database_id
,@database_name = name
FROM sys.databases
WHERE database_id > @database_id
ORDER BY database_id
END
--File Sizes
SELECT database_name, groupid, ISNULL(groupname,'TLOG') groupname, fileid, name, file_size, space_used, free_space, filename
FROM @file_size
--File Group Sizes
SELECT database_name, groupid, ISNULL(groupname,'TLOG') groupname, SUM(file_size) as file_size, SUM(space_used) as space_used, SUM(free_space) as free_space
FROM @file_size
GROUP BY database_name, groupid, groupname
Я согласен с первым ответом, но в целом с базой данных Microsoft CRM размером более 100 ГБ я бы рекомендовал иметь больше ОЗУ на SQL Server, чем 12 ГБ, и предпочел бы видеть не менее 32 ГБ ОЗУ для база данных Microsoft CRM такого размера. Чтобы точнее выяснить причину проблем с производительностью SQL Server, необходимо определить запросы, которые вызывают наибольшую нагрузку на сервер. Это не всегда один запрос, но иногда это набор параметризованных запросов, которые могут выполняться тысячи раз, что способствует снижению производительности. Вы можете определить их, используя сценарии сбора статистики SQL Server Perf Stats для сбора данных во время пиковой нагрузки в течение примерно 5 минут, http://sqlnexus.codeplex.com/wikipage?title=Sql2005PerfStatsScript&referringTitle=Home , (просто используйте StartSQLDiagTrace20082.cmd, а не подробные коллекции трассировки). Вы можете использовать инструмент SQLNexus, доступный по адресу http://sqlnexus.codeplex.com/ для анализа данных и просмотра отчетов, которые могут помочь вам показать, какой запрос или запросы вызывают наибольшую нагрузку на сервер по общей продолжительности, общему количеству чтений, общему количеству ЦП или общему количеству записей. Обычно я сосредотачиваюсь на самых популярных запросах по общему количеству чтений или общей продолжительности и получаю примеры этих запросов для выполнения с помощью советника по настройке базы данных SQL Server, чтобы определить, есть ли какие-либо отсутствующие индексы или статистические данные, которые можно применить для повышения производительности.
Поскольку ваш SQL Server имеет 3 ядра, он также получит лучшую производительность с базой данных Microsoft Dynamics CRM, если вы установите Max Degree of Parallelism на 1. См. Ниже эти команды, чтобы установить это.
sp_configure «Показать дополнительные параметры», 1 перенастроить; GO sp_configure 'максимальная степень параллелизма', 1 Перенастроить с переопределением; GO sp_configure 'Показать дополнительные параметры', 0 Изменить конфигурацию; ИДТИ