Необходимость дефрагментации почтовых баз в Exchange Server 2010 возникает из-за того, что при удалении информации из базы данных, она автоматически не сжимается (остаются пустые страницы), и соответственно размер файла базы не уменьшается. Например, если из почтовой базы размером 20 Гб перенести ящики пользователей, общим размером 5 Гб, то размер файла останется неизменным 20 ГБ. Однако, освободившиеся 5 Гб «свободного» места в дальнейшем будет использоваться новыми элементами.
Поэтому если вам необходимо уменьшить размер файла почтовой базы в Exchange 2010, удалив незанятые страницы, вы можете воспользоваться одной из следующих методик:
- Создать новую базу данных, перенести вся ящики в нее и удалить старую базу
- Выполнить офлайн дефрагментацию текущей базы
Каждая из указанных методик имеет свои плюсы и минусы. Офлайновая дефрагментация предполагает простой ящиков пользователей, но она является единственным доступным решением при нехватке дискового пространства (вам просто негде создать новую базу данных).
С другой стороны миграция ящиков в новую базу менее рискованная процедура, но помимо необходимости иметь достаточно свободного места для хранения двух почтовых хранилищ , генерирующая большое количество транзакций, также существенно увеличивающих требования к доступному свободному месту, и как результат, процесс переноса пользователей может занять несколько дней.
Следует четко различать процессы офлайн и онлайн (интерактивной) дефрагментации базы Exchange 2010. Интерактивная дефрагментация в Exchange выполняется постоянно при включенной опции Enable background database maintenance (24 x 7 ESE scanning). Эта процедура выполняется в фоновом режиме включает в себя удаление устаревших элементов в хранилище и оптимизацию расположения страниц. Основная задача – освободить неиспользуемое пространство за счет сжатия записей до минимально возможного количества страниц с целью сокращения количества операций ввода/вывода. Отметим, что неиспользуемое пространство не возвращается системе. Офлайн дефрагментация позволяет высвободить это пространство.
Определяем размер свободного места в базе Exchange 2010
Чтобы в Exchange 2010 узнать текущий размер базы данных и количество свободного места в ней (те самые неиспользуемые страницы), в Exchange Management Shell выполните следующую команду:
C:\>Get-MailboxDatabase -Status | ft name,databasesize, availablenewmailboxspace -auto
Name DatabaseSize AvailableNewMailboxSpace—- ———— ————————
WI-DB-01 17.26 GB (18,604,766,720 bytes) 8.544 GB (9,247,766,016 bytes)
WI-DB-02 14.63 GB (15,785,670,144 bytes) 4.696 GB (4,968,761,856 bytes)
WI-DB -Archive-01 658.1 MB (689,542,784 bytes) 234.6 MB (241,164,544 bytes)
В данном примере видно, что текущий размер базы WI-DB-01 17 Гб, причем свободного места в ней аж 8.5 Гб. И если вы хотите высвободить это место, размер файла почтовой базы можно уменьшить, выполнив дефрагментацию утилитой ESEUTIL.
Далее я покажу, каким образом можно дефрагментировать файл почтовой базы Exchange 2010 на отдельно стоящем сервере, который не является членом Database Availability Group.
ПРИМЕЧАНИЕ. Если ваш сервер входит в в группу DAG не используйте данную инструкицю!
Подготовка к дефрагментации Exchange 2010
При планировании дефрагментации базы нужно четко понимать, что для выполнения данной работы, необходимо отмонтировать нужную базу, что недоступность почты для всех пользователей, находящиеся в этой базе данных.
Далее необходимо удостовериться, что имеется достаточно свободного места для выполнения дефрагментации. В процессе дефрагментации создается новый файл базы и на диске одновременно хранятся старый и новый файл, кроме того нужно дополнительное место для временных файлов, создаваемых утилитой eseutil.
Поэтому, если вы собираетесь выполнить дефрагментацию почтовой Exchange, необходимо иметь свободное место, равному не менее 110% от текущего размера базы (без учета пустых страниц).
В моем случае это означает, что нам необходимо иметь как минимум 9,6 Гб свободного места на диске:
17.26 – 8.54 = 8.72
8.72 x 1.1 = 9.6
Если на текущем диске такого количества места нет, необходимо в параметрах eseutil указать альтернативное расположение временных файлов. Это может быть другой диск или сетевой UNC-путь, однако следует учесть, что при использовании UNC пути время дефрагментации может существенно увеличиться из-за пропускной способности и задержек сети.
Также нужно удостовериться, что вы у вас есть актуальная резервная копия дефрагментируемой базы данных, чтобы не было потом мучительно больно…
Использование ESEUtil для дефрагментации базы Exchange
Откройте командную строку Exchange Management Shell и перейдите в каталог с файлом почтовой базы:
cd D:\Data\WI-DB-01
Размонтируем базу.
Dismount-Database WI-DB-01
Запускаем дефрагментацию с помощью утилиты ESEUtil.
D:\Data\WI-DB-01>eseutil /d WI-DB-01.edb /t\\tmp_srv\exch\temp.edb
Extensible Storage Engine Utilities for Microsoft(R) Exchange Server
Version 14.01
Copyright (C) Microsoft Corporation. All Rights Reserved.
Initiating DEFRAGMENTATION mode…
Database: WI-DB-01.edb
Defragmentation Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|—-|—-|—-|—-|—-|—-|—-|—-|—-|—-|
……………………………………………
Moving ‘\\ tmp_srv\exch\temp.edb’ to ‘WI-DB-01.edb’…
File Copy Status (% complete)
0 10 20 30 40 50 60 70 80 90 100
|—-|—-|—-|—-|—-|—-|—-|—-|—-|—-|
……………………………………………
Note:
It is recommended that you immediately perform a full backup
of this database. If you restore a backup made before the
defragmentation, the database will be rolled back to the state
it was in at the time of that backup.
Operation completed successfully in 2798.218 seconds.
Монтируем базу:
mount-Database WI-DB-01
Убедимся, что ее размер уменьшился:
Get-MailboxDatabase -Status | ft name,databasesize,availablenewmailboxspace -auto
Name DatabaseSize AvailableNewMailboxSpace
—- ———— ————————
WI-DB-01 8.328 GB (8,942,190,592 bytes) 5.219 MB (5,472,256 bytes)
WI-DB-02 14.63 GB (15,785,670,144 bytes) 4.696 GB (4,968,761,856 bytes)
WI-DB -Archive-01 658.1 MB (689,542,784 bytes) 234.6 MB (241,164,544 bytes)
Как определить приблизительное время дефрагментации?
Сложно сказать. Слишком много факторов на это влияет это и скорость дисков, производительности самого сервера, нагруженности дисковой подсистемы. состояния самой базы и т.д. В своей инфраструктуре я в среднем получаю 30 Гб/час
30 Гб/час применять к какому размеру ДБ ?
30 Гб/час применимо к какому размеру?
Такая схема подойдет для Exchange 2003?
Fanta 50 Гб база у меня дефрагментрировалась чуть меньше 2 часов
antonon Да, в Exchange 2003 также можно выполнить дефрагментацию с помощью утилиты eseutil /d. Принципы примерно такие-же
Если у меня база на D диске, на котором месте меньше свободного чем сама база. как мне вписать строчку правильно?
или надо перенести базу на внешний диск и на нем делать дефрагментацию?
роь Внимательно перепрочтите статью, и если условие о том, что необходимо иметь свободное место, равному не менее 110% от текущего размера базы (без учета пустых страниц) не выполняется, тогда придется необходимо в параметрах eseutil указать альтернативное расположение временных файлов.
Т.е. если база находится на диске D, но вы также подключили некое внешнее хранилище под буквой U, то дефрагментацию можно запустить командой: D:\Data\WI-DB-01>eseutil /d WI-DB-01.edb /tu:\temp_defrag.edb
У меня база 30 Гб. сделал дефрагментацию и уменьшилось всего на 4Гб. хотя очень много ящиков было удалено и пользователей. там должно было в двое уменьшится .
А что команда PoSh выдает?
Get-MailboxDatabase -Status | ft name,databasesize, availablenewmailboxspace -aut
что это за команда и как ее вводить?
база должна быть откреплена?
роь это команда Powershell. Вводится она в одноименной консоли (настоятельно рекомендую познакомится с основами Powershell, т.к. это позволяет существенно облегчить работу с Exchange 2010/2007), база должна быть смонтирована
Маленькое уточнение:
Get-MailboxDatabase -Status | ft name,databasesize, availablenewmailboxspace -auto
показывает статистику по всем базам в организации.
Get-MailboxDatabase -Server Server -Status | ft name,databasesize, availablenewmailboxspace -auto
показывает статистику по всем базам на сервере Server
На сервере Exchange 2003 нет места, а база очень выросла, надо делать дефрагментацию.
Могу я eseutil.exe скопировать на пользовательский компьютер вместе с базой Exchange и запустить дефрагментацию из под Windows 7?
Да, можете
скопировал файлы eseutil.exe, ese.dll, jcb.dll, exosal.dll и exchmem.dll из папки Exchsrvr\Bin в компьютере Exchange 2003 во временную папку,
запустил, команду C:\Users>1\eseutil.exe /d D:\mail\priv1.edb
пошел процесс, через некоторое время пишет
unable to find callback library jcb.dll (or one of ots dependencies). Copy in the file and hit OK to retry, or hit Cancel to abort.
Хотя этот файл есть. Заменил его еще раз, но сообщение так и появляется.
Что можно сделать?
Может нужно библиотеки зарегистрировать regsvr32…
а Windows 7 случайно не 64 -разрядная?
Windows 7 x32