Автор Гілка: mysql на віртуальному диску  (Прочитано 1213 раз)

Відсутній Volodymyrko

  • Графоман
  • ****
  • дописів: 370
  • Карма: +0/-0
  • I Like FreeBSD !
Добрий день ...
хочу пришвишити продуктивність mysql, і як один з варіантів виникла ідея помістити mysql у віртаульний диск в памяті ...
система в мене FreeBSD, диск створити виходить ...
але на ньому нічого побачтит не можна (так ніби і повинно бути ??? ) ..

Питання: чи таке можливо mysql на вірт. диску ... і якщо так, то як на нього ту базу або навіть всі запхати ...  ???

Відсутній anatolijd

  • Графоман
  • ****
  • дописів: 325
  • Карма: +0/-0
Re: mysql на віртуальному диску
« Відповідей #1 : 2007-07-02 15:34:42 »
Ну, для початку треба якимось чином сказати мусклу шо юзати треба саме ramdisk

Я б зробив так - при стопнутому мусклі мувнув ~mysqld/data директорію на ramdisk, і тоді просто стартував сервер.

1. готуєм рам-диск розміром 4Гб (його ж є у вас, правда?):
mount -t tmpfs -o size=4G,nr_inodes=20k,mode=777 tmpfs /mnt/ram

2. стопаєм сервер
service mysqld stop

3. копіюєм директорію бази даних 'database' в память, і робим лінк ~mysql/database який вказує на ramdisk:
 
cd ~mysql
mv database database.orig
cp -R database.orig /mnt/ram/database
ln -s /mnt/ram/database ~mysql/database

4. service mysqld start

Всьо, тепер мускл сервер is running, і робота з базою даних 'database' відбувається тільки в памяті :)
Select/Update квері виконуються набагато швидше, але якщо мускл сервер зупинити - всі дані для цієї бази даних будуть втрачені! Якшо фізичний сервак раптом зробить ребут - то саме.
Шоб їх зберегти - треба скопіювати файли цієї бази даних з ram на hdd:

/bin/cp -R /mnt/ram/database  ~mysql/database.backup
і після того стопати mysql сервер.

Таким чином, можна пододавати в память кожну потрібну базу даних.
Це стосується лише MyISAM  таблиць, з InooDB такого робити не варта, оскільки InnoDB  engine має алгоритми кешування даних в памяті і намагається тримати в памяті по максимуму даних. Коротше - виграшу в швидкодії точно не буде, а покоцати дані - як два байти об асфальт.

Для innodb - можна логи транзакцій на окремому диску писати, перевіряв, реально допомагає ;)

Як варіант оптимізації mysql - можна перевести таблиці в innodb формат, але реально це відчується на базах даних з великими таблицями даними під постійним навантаженням. Якщо таблиці і дані не є великі - мабуть MyISAM буде оптимальним варіантом. Тут вже теба аналізувати самі дані і структуру таблиці та sql запитів які виконуються, може де буде достатньо індекс додати ;)

Ше можливий варіант - юзати HEAP-таблиці (знову ж таки, доведеться заморочуватись з збереженням даних з памяті на диск інакше до-побачення).

А взагалі - можна і залізо на сервері поміняти, скажімо юзати диски SCSI замість SATA.
І як на мене - цей останній варіант - найнадійніший з точки зору збереженя даних;)

Про кластери mysql я просто згадаю шо є й такий солюшн, але він не є загальновживаний бо, як правило, має специфічні вимоги до аплікацій.
« Змінено: 2007-07-02 15:54:19 від anatolijd »