Смонтировать базу MySQL на доп. HDD

12
B
На сайте с 23.10.2006
Offline
170
3068

Для работы потребовалась база MySQL на 10млн. записей (объщий объем 1Гб с индексами)

Работа с БД идет на столько интенсивно (в секунду порядка 1000 селектов, 100 инсертов и 1000 обновлений)

что БД очень быстро фрагментируется и производительность падает в десятки раз.

Захотелось вынести БД на отдельный диск (в идеале на RAM диск со сливом дампов)

Но как сказать MySQL-ю что нужно подмантировать БД из другого каталога (на другом HDD) не знаю.

PS.

Система крутится на Windows XP

PPS.

Хотел попробовать хардлинк, но он работает только в пределах одного логического диска.

S
На сайте с 19.10.2006
Offline
25
#1

ужас какой, зачем вам mysql ?

Переходите с такими объёмами на оракл :)

сразу видно, что при проектировании системы не учли масштабируемость

B
На сайте с 23.10.2006
Offline
170
#2

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

такчто жду подсказки.

PS.

Самое тупое решение которое видится - поставить для этой БД отдельный MySQL сервачек, который будет крутиться на доп. HDD и на отличном порту от основного сервера, но решение кажется не очень красивым.

DeveloperRu
На сайте с 27.02.2009
Offline
72
#3
bimcom:
База используется не для коммерческого применения, а для личного опыта, а т.к. раньше с мюскулем работал - вот с помощью него и решил объщитать (раньше максимальные базы с которыми работал ограничивались 50тыс. записями - так что граблей никаких не встречал)
такчто жду подсказки.
PS.
Самое тупое решение которое видится - поставить для этой БД отдельный MySQL сервачек, который будет крутиться на доп. HDD и на отличном порту от основного сервера, но решение кажется не очень красивым.

если все упирается в харды - советую разнесты бд на разные винты простой операцией partition

смотрите подробнее здесь http://dev.mysql.com/tech-resources/articles/mysql_5.1_partitioning.html

суть фичи такова, что вы можете разделить таблицу на несколько частей (незаметно для себя), которые могут лежать на разных хардах

делить можно по первичному ключу, по дате или по какому-то выражению

таким образом, можно повысить производительность

Ответы на вопросы (http://telenok.com)
B
На сайте с 23.10.2006
Offline
170
#4
DeveloperRu:
если все упирается в харды - советую разнесты бд на разные винты простой операцией partition

Тоже идея (оставить на главном диске первую запись а остальное утянуть на доп. диск), но харды "справляются" (RAID загружает ЦП по полной) как появляется сильная дефрагментация (а она появляется через 10 минут работы) - производительность резко снижается (надеюсь от этого спасет вынос на отдельный диск - никакие другие процессы на пути файлов БД чтоб ничего не писали).

PS.

А что будет с индексами? - они тоже растянутся по дискам пропорционально? или останутся на исходном?

DeveloperRu
На сайте с 27.02.2009
Offline
72
#5
bimcom:
Тоже идея (оставить на главном диске первую запись а остальное утянуть на доп. диск), но харды "справляются" (RAID загружает ЦП по полной) как появляется сильная дефрагментация (а она появляется через 10 минут работы) - производительность резко снижается (надеюсь от этого спасет вынос на отдельный диск - никакие другие процессы на пути файлов БД чтоб ничего не писали).
PS.
А что будет с индексами? - они тоже растянутся по дискам пропорционально? или останутся на исходном?

об индексах там должно быть подробно расписано

вообще, имхо, я бы делил такую таблицу из 10млн на 25 мелких через партишены и далее экспериментировал - перед разносом на харды

N
На сайте с 06.05.2007
Offline
419
#6

что по-вашему "сильная фрагментация" ? чем вы этот показатель измеряете?

и пробовали ли вы делать optimize table ? в этом случае у вас все якобы должно на 10 минут начать работать быстро, потому как этот процесс для myisam создает новый файл и он скорее всего будет непрерывный.

обычно идея неплохая. на xp можно целый раздел диска "подключить том как пустую ntfs-папку".

Кнопка вызова админа ()
BR
На сайте с 28.06.2008
Offline
75
#7
bimcom:
Но как сказать MySQL-ю что нужно подмантировать БД из другого каталога (на другом HDD) не знаю.

Параметр --basedir указывает директорию для хранения баз (всех баз)

размещение сайтов (http://www.brim.ru)
B
На сайте с 23.10.2006
Offline
170
#8
netwind:
что по-вашему "сильная фрагментация" ? чем вы этот показатель измеряете?

Сильная фрагментация - >500 кусков файла.

netwind:

и пробовали ли вы делать optimize table ? в этом случае у вас все якобы должно на 10 минут начать работать быстро, потому как этот процесс для myisam создает новый файл и он скорее всего будет непрерывный.

Пробовал, но почемуто нужного эффекта не достигается - фрагментированность остается, наверное умная ОС пишет файл как её кажется более правильно, а не чтоб занять свободное место.

netwind:

обычно идея неплохая. на xp можно целый раздел диска "подключить том как пустую ntfs-папку".

Вот за это спасибо!

Незнал о такой возможности.

Единственная проблема, с которой сталкнулся - установил RAMDisk "Enterprise", а он как оказалось создает диски которые ни ОС ни др. программы не воспринимают как полноценные диски.

Но выручил SuperSpeed RamDisk.

Всем спасибо!

N
На сайте с 06.05.2007
Offline
419
#9

Фрагментация файлов - причина которую обычно предполагает человек не знакомый с оптимизацией субд. Раз optimize не помогает, дело скорее всего не в фрагментации.

Копировать файлы в память обычно тоже нет необходимости, они и так оседают в кеше операционной системы.

Советую сначала найти узкие места и ознакомиться с традиционными методами оптимизации запросов.

B
На сайте с 23.10.2006
Offline
170
#10
netwind:
Фрагментация файлов - причина которую обычно предполагает человек не знакомый с оптимизацией субд.

А как ещё можно можно объяснить РЕАЛЬНУЮ ситуация, которая повторяется 10 раз подрят?

работает база в 2х режимах.

1. Все летает, тоесть база переваривает в секунду 2000 обращений к ней (кол-во записей 10млн. размер 1ГБ) при кол-ве фрагментов <100, при этом поиск по ней точного вхождения длится 0,0003 сек

2. Все тормазит, тоесть база переваривает в секунду 200 обращений к ней (кол-во записей 10млн. размер 1ГБ) при кол-ве фрагментов >500, при этом поиск по ней точного вхождения длится 0,05-0,15 сек.

И все решается дефрагментированием.

netwind:
ФРаз optimize не помогает, дело скорее всего не в фрагментации.

Оптимизация как-то не правильно срабатывает - тоесть БД задумывается - файлы БД таскает, но в итоге фрагментированность остается и устраняется тольк WIN дефрагментатором

PS.

Заливка БД в RAM оказалась только временной примочкой, при достижение фрагментированности БД 5000 фрагментов - производительность ниже плинтуса (аналогично что на жестком диске при кол-ве фрагментов >500)

PPS.

Кто что ище может посоветовать?

(Может можно какнибудь искуственно раздуть БД чтобы она использовала выделенное её пространство, аля создание разреженного файла?)

На всякий случай сообщаю структуру БД

int(11) | varchar(80) | int(11)

первичный ключ | индекс | индекса нет

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий