09.04.2009, 15:43 | #1 |
Участник
|
Распределение базы по разным дисковым массивам
Ax3.0sp3 vs MS SQL2ksp4
Имеется 2 дисковых массива: 1) RAID 10 (6 дисков) 2) RAID 10 (6 диска) Сейчас база находится на рейд 1, лог на ред 2. Планирую перенести часть данных с рейда 1 на рейд 2 (filegroups). Функционал:финансы + логистика + торговля (финционал модифицирован но идеология осталась базовая). "Оперативный" набор данных хранится сиквелом в памяти и дисковая подсистема интенсивно используется во время различно рода отчетов (потому как за частую это просмотр *Trans таблиц). Существует 3 подхода: 1) разносить данные с индексами 2) разнести стержневые таблицы (например inventTrans - inventDim) 3) комбинировать 1 и 2 подходы. Имеются ли рекомендации относительно распределения данных для достижения максимальной эффективности использования 2 массивов?
__________________
--- SHiSHok |
|
09.04.2009, 17:01 | #2 |
Member
|
Я бы попробовал просто два файла данных создать на разных массивах (аналог JBOID, но из RAID массивов). И пусть СУБД сама решает что куда писать.
__________________
С уважением, glibs® |
|
09.04.2009, 18:12 | #3 |
Участник
|
мне кажется хаотичное распределение страниц по массивам на увеличении производительности никак не скажется. Хотя это можно рассматривать как вариант объединения 2х массивов (можно даже программный raid 0 сделать из 2х физических массивов)
__________________
--- SHiSHok |
|
09.04.2009, 22:33 | #4 |
MCITP
|
__________________
Zhirenkov Vitaly |
|
10.04.2009, 10:44 | #5 |
Участник
|
Почерпнул знание о том что разнесение индексов с данными по разным массивам не принципиально для исполнения запроса, так как в транзакции индекс и данные читаются последовательно.
Считаю что разнесение имеет смысл только с целью оптимизации I/O с массива, так как индекс содержит гораздо меньше полей и одна запись индекса имеет гораздо меньший размер чем строка данных. Соответственно чтение одного диапазона индекса и данных породит разный объем I/O, поэтому имеет смысл индекс располагать на массиве с меньшей пропускной способностью (если таковой имеется). Дальше, думаю, надо рассматривать схему данных акс, для оптимизации исполнения запросов. В первую очередь выносить на другой массив "подключаемые" таблицы, которые чаще участвуют в связках нежели самостоятельно: 1) Для торговли и логистики имеет место быть часто встречающаяся следующая связка: (*trans, *line) -> InventDim -> Invent*. Соответственно InventDim и (*line, *trans , invent*) разносятся по разным массивам. 2) можно разнести DocuRef с DocuValue. есть еще идеи?
__________________
--- SHiSHok |
|
10.04.2009, 11:29 | #6 |
Участник
|
sysDataBaseLog отдельно вынести.
|
|
10.04.2009, 12:09 | #7 |
Участник
|
Для Ax3.0 если выносить индексы в файловые группы, отличные от таблиц следует учесть ситуацию, с которой мы столкнулись. При изменении структуры таблицы Акса в момент синхронизации вернет индекс в ту же файловую группу, что и таблица. Поэтому, если приняли такой подход, то после синхронизации нужно опять выносить индексы.
|
|
10.04.2009, 12:40 | #8 |
Участник
|
2 Raven Melancholic
Для этого можно воспользоваться формой SysSqlSetup (доступ к ней есть через форму SQL Администрирование, но он включается только для ORACLE, хотя использовать можно и для MS SQL). Только для работы с SQL2005 надо ее слегка доработать В метод sqlServerInit() надо добавить X++: ... resultSet = statement.executeQuery('select groupname from sysfilegroups'); while(resultSet.next()) { segmentName = resultSet.getString(1); sqlSegment.add(segmentName); } sqlSegment.setDropSize(); } И еще. Кластерные индексы хранятся вместе с данными, по-этому перенести их в другую файловую группу не получится PS В этой форме список таблиц выводится в порядке следования их ID. Для настройки неудобно, по-этому сделал сортировку по наименованию X++: void fillTables() { int tableCounter; dictTable dictTable; Set set = new Set(Types::String); SetEnumerator tableEnum; tableList.lock(); for(tableCounter = dictionary.tableNext(0); tableCounter > 0; tableCounter = dictionary.tableNext(tableCounter)) { dictTable = new DictTable(tableCounter); if((!dictTable.isTmp()) && (!dictTable.isMap())) set.add(dictTable.name()); // tableList.add(dictTable.name()); } tableEnum = set.getEnumerator(); while (tableEnum.moveNext()) { tableList.add(tableEnum.current()); } tableList.unLock(true); }
__________________
Axapta v.3.0 sp5 kr2 Последний раз редактировалось AndyD; 10.04.2009 в 12:44. Причина: Добавил метод fillTables() |
|
|
За это сообщение автора поблагодарили: fed (5), Raven Melancholic (2). |
10.04.2009, 13:04 | #9 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Для Ax3.0 если выносить индексы в файловые группы, отличные от таблиц следует учесть ситуацию, с которой мы столкнулись. При изменении структуры таблицы Акса в момент синхронизации вернет индекс в ту же файловую группу, что и таблица. Поэтому, если приняли такой подход, то после синхронизации нужно опять выносить индексы.
удалось вернуть индексы в прежнюю файловую группу в SQL Администрирование - переиндексация (и то index с типом Primary Key остался в новой группе) а какие версии Ax и сиквела у Вас?
__________________
--- SHiSHok |
|
10.04.2009, 13:07 | #10 |
Участник
|
Еще есть идея "модульно" разделить таблицы, например финансовые таблицы вынести на отдельный массив (можно менее производительный так как бухгалтерии скорость отклика не принципиальна в отличии от торговли)
__________________
--- SHiSHok |
|
10.04.2009, 14:38 | #11 |
Участник
|
|
|
10.04.2009, 15:19 | #12 |
Участник
|
Прирост производительности, скорее всего, будет минимальным, т.к. общая производительность дисковой подсистемы не увеличится. Совмещение на одном массиве файлов БД и логов транзакций не желательно, запись в логи производится on-line, а в БД отложенно. Занимался подобным разделением с 4-мя массивами в конечном варианте, но основной целью было увеличения дискового пространства. Единственное удобство - возможность мониторить загрузку дисков по выделенным табличкам в Performance Monitor
|
|
10.04.2009, 16:09 | #13 |
Участник
|
про лог согласен, так что будет скорее всего:
канал 1
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 10.04.2009 в 16:28. |
|
10.04.2009, 21:10 | #14 |
Участник
|
Цитата:
Для этого можно воспользоваться формой SysSqlSetup (доступ к ней есть через форму SQL Администрирование, но он включается только для ORACLE, хотя использовать можно и для MS SQL).
Цитата:
изменил файл.группу для индексов -> добавил поле -> синхронизировал -> удалил поле -> синхронизировал...
|
|
10.04.2009, 22:26 | #15 |
----------------
|
Перед разделением на группы стоит провести анализ, что и как напрягает вашу дисковую подсистему. Потом решить хотите ли вы ускорять какие-то конкретные процессы или "общую температуру по больнице".
Если решите переходить на 2005, то для него рекомендуют tempdb выносить на отдельный диск. |
|
11.04.2009, 12:43 | #16 |
Участник
|
Цитата:
Сообщение от Wamr
Перед разделением на группы стоит провести анализ, что и как напрягает вашу дисковую подсистему. Потом решить хотите ли вы ускорять какие-то конкретные процессы или "общую температуру по больнице".
Если решите переходить на 2005, то для него рекомендуют tempdb выносить на отдельный диск.
__________________
--- SHiSHok |
|
11.04.2009, 19:31 | #17 |
Модератор
|
Давайте сначала определимся с целью -
а) "распределение ради распределения". Тут число вариантов стремится к бесконечности б) "отделить финансы от логистики". Да, можно. Только много ли операций в финансах, сильно напряшающих ХД? Знаю пару типа финансовых отчетов (с использованием корреспонденции), не более. Т.о., если просто "все поделить", половина ХД будет нагружена логистикой, половина - простаивать в) "разнести ради производительности". Интересная тема. Хочу увидеть реально работающую схему. Хочу увидеть сравнение с цифрами "до и после". Еще больше хочу увидеть методику сравнения. Пока видел только теории Цитата:
и пока склоняюсь к вынесению финансов на DATA2 (у меня сейчас все на DATA1). может фин деятельность в моменты построения отчетов не так сильно будет торговлю напрягать
Сам там, где возможно, стараюсь следовать принципу KISS principle
__________________
-ТСЯ или -ТЬСЯ ? |
|
12.04.2009, 12:49 | #18 |
Участник
|
Все гораздо прозаичнее - дисковый массив на котором данные уперся в потолок (RAID10: 6 дисков, база порядка 200Gb). т.о. часть данных надо перенести на другой массив (для начала будет 4 диска, потом добью до 6).
Т.е. цель: разнести данные. Можно конечно не заморачиваться - разделил и забыл, потери производительности не будет. Но хочется из необходимости разделения данных выжать максимум. Методику сравнения вижу только в сравнении показательных запросов на холодном кэше.
__________________
--- SHiSHok |
|
12.04.2009, 13:30 | #19 |
Модератор
|
Цитата:
Если кто-то сможет предложить схему разбиения, которая будет работать шустрее, чем одна файловая группа - welcome, только, по возможности - с цифрами Если свободное место на сторадже поджимает, можно подумать насчет миграции на raid5. Если ХД относительно новая (выпущена в этом веке) - вполне может справиться, мы на примерно того же размера БД гоняем на CX300 без особых проблем Цитата:
Методику сравнения вижу только в сравнении показательных запросов на холодном кэше
__________________
-ТСЯ или -ТЬСЯ ? |
|
12.04.2009, 16:27 | #20 |
Участник
|
Цитата:
Цитата:
Сообщение от Vadik
Если кто-то сможет предложить схему разбиения, которая будет работать шустрее, чем одна файловая группа - welcome, только, по возможности - с цифрами
Если свободное место на сторадже поджимает, можно подумать насчет миграции на raid5. Если ХД относительно новая (выпущена в этом веке) - вполне может справиться, мы на примерно того же размера БД гоняем на CX300 без особых проблем ну это уже тема дипломной работы. KISS priciple!!! можно логически заключить что если "тяжелый" запрос отработает быстрее чем при тех же условиях на другой конфигурации дисковой подсистемы, то это смело можно считать положительным результатом.
__________________
--- SHiSHok |
|
Теги |
ax3.0, file group, raid, sql, sql server, база данных, дисковый массив, производительность, файловые группы |
|
Похожие темы | ||||
Тема | Ответов | |||
Принципы построения базы данных | 11 | |||
Размер базы | 13 | |||
Распределение бюджетов в Аксапте | 2 | |||
Вопрос по журналу базы данных(лог) | 2 | |||
Создание полной копии Приложения и базы | 5 |
|