Журнали та накопичувачі даних мають різні шаблони доступу до даних, які конфліктують між собою (принаймні теоретично), коли вони поділяють диск.
Журнал записів
Доступ до журналу складається з дуже великої кількості невеликих послідовних записів. Дещо спрощено, журнали БД - це буферні дзвінки, що містять перелік інструкцій для запису елементів даних у певні місця на диску. Шаблон доступу складається з великої кількості невеликих послідовних записів, які повинні бути гарантовано виконані - тому вони виписуються на диск.
В ідеалі журнали повинні бути тихими (тобто не поділятися ні з чим іншим) RAID-1 або RAID-10. За логікою ви можете розглядати процес як основну СУБД, що виписує записи журналу, і один або кілька потоків зчитування журналів, які споживають журнали та записують зміни на диски даних (на практиці процес оптимізований таким чином, що записи даних записуються негайно, де можливо). Якщо на журнальних дисках є інший трафік, голови переміщуються цими іншими доступами, і послідовне записування журналу стає випадковим записом журналу. Вони набагато повільніше, тому зайняті диски журналу можуть створити точку доступу, яка є вузьким місцем для всієї системи.
Дані записує
(оновлено) Запис у журнал повинен бути заповнений на диск (званий стабільним носієм), щоб транзакція була дійсною та прийнятна для здійснення. Логічно можна розглядати це як записи журналу, які записуються, а потім використовуються як інструкції для виписування сторінок даних на диск асинхронним процесом. На практиці записи сторінок диска фактично готуються і буферуються під час внесення запису в журнал, але їх не потрібно писати негайно для здійснення транзакції. Дискові буфери виписуються на стабільні носії (диск) за допомогою процесу Lazy Writer (спасибі Полу Рандалу, що вказав на це), про який у цій статті Technet йдеться більш докладно.
Це дуже випадковий шаблон доступу, тому обмін одними і тими ж фізичними дисками з журналами може створити штучне вузьке місце щодо продуктивності системи. Записи журналу повинні бути записані для здійснення транзакції, тому випадкове прагнення уповільнити цей процес (випадковий введення / виведення набагато повільніше, ніж послідовний вхід / вивід журналу) перетворить журнал із послідовного в пристрій випадкового доступу. Це створює серйозні вузькі місця в навантаженій системі, і цього слід уникати. Те саме стосується спільного використання тимчасових областей з томами журналів.
Роль кешування
Контролери SAN, як правило, мають великі кеші оперативної пам'яті, які можуть певною мірою поглинати трафік випадкового доступу. Однак для цілісності транзакцій бажано мати записи з диска з СУБД, гарантовано завершені. Якщо контролер встановлений для кешування зворотного запису, брудні блоки кешуються, а виклик вводу / виводу повідомляється хостом.
Це може згладити безліч суперечок, оскільки кеш може поглинути багато вводу-виводу, який інакше вийшов би на фізичний диск. Він також може оптимізувати паритет читання та запису для RAID-5, що зменшує вплив на продуктивність, яку мають томи RAID-5.
Це характеристики, які зумовлюють школу думки "Нехай САН займається цим", хоча ця думка має деякі обмеження:
Кешування зворотного запису все ще має режими відмов, які можуть втрачати дані, і контролер перейшов до СУБД, кажучи, що блоки були записані на диск, де насправді їх немає. З цієї причини ви, можливо, не захочете використовувати кешування зворотного запису для транзакційного додатку, зокрема, щось, що містить важливі для фінансових даних або фінансові дані, коли проблеми цілісності даних можуть мати серйозні наслідки для бізнесу.
SQL Server (зокрема) використовує введення / виведення в режимі, коли прапор (званий FUA або примусовий доступ до оновлення) змушує фізичне записування на диск до повернення дзвінка. Microsoft має сертифікаційну програму, і багато постачальників SAN виробляють обладнання, яке шанує цю семантику ( тут викладені вимоги ). У цьому випадку ніякого кількості кеш-пам'яті не буде оптимізувати записи на диск, який означає , що журнал трафік буде трешем , якщо він сидить на зайнятої роздільний обсязі.
Якщо програма генерує багато дискового трафіку, її робочий набір може перевиконати кеш, що також спричинить проблеми з суперечливістю запису.
Якщо SAN поділяється з іншими програмами (особливо на тому ж диску), трафік інших програм може генерувати вузькі місця журналу.
Деякі програми (наприклад, сховища даних) генерують великі перехідні сплески навантаження, що робить їх досить антисоціальними для SAN.
Навіть для великих SAN окремі томи журналів все ще рекомендуються практикою. Ви можете уникнути, не турбуючись про макет на злегка використовуваному додатку. У дійсно великих програмах ви навіть можете отримати перевагу від декількох контролерів SAN. Oracle публікує серію кейсів сховища даних, де деякі більші конфігурації включають кілька контролерів.
Покладіть відповідальність за продуктивність там, де вона належить
Що стосується великих обсягів або коли продуктивність може бути проблемою, зробіть команду SAN відповідальною за виконання програми. Якщо вони ігнорують ваші рекомендації щодо конфігурації, то переконайтесь, що керівництво знає про це і що відповідальність за продуктивність системи лежить у відповідному місці. Зокрема, встановіть прийнятні вказівки для ключових статистичних даних про виконання БД, як-от очікування вводу-виводу або очікування засувки сторінки або прийнятне домовлене угоди про введення-виведення.
Зауважте, що відповідальність за продуктивність, розбиту на декілька команд, створює стимул для точкового введення та передачі долара іншій команді. Це відомий антидіапазон управління та формула проблем, які тягнуться місяцями або роками, і ніколи не вирішуються. В ідеалі повинен бути єдиний архітектор, який має повноваження визначати додаток, базу даних та зміни конфігурації SAN.
Крім того, орієнтуйте систему на навантаження. Якщо ви можете домовитись про це, на Ebay можна придбати сервіси б / у та прямі вкладення масивів прямо. Якщо ви встановите подібне вікно з одним або двома дисковими масивами, ви можете фрігувати з конфігурацією фізичного диска та вимірювати вплив на продуктивність.
Як приклад, я провів порівняння між додатком, що працює на великому SAN (IBM Shark), і коробкою з двома розетками з прямим приєднанням масиву U320. У цьому випадку апаратне забезпечення, яке було придбано на ebay, становить 3 000 фунтів стерлінгів, перевищило 1 мільйон фунтов стерлінгового SAN в два рази - на хості з приблизно еквівалентною конфігурацією процесора та пам'яті.
З цього конкретного інциденту можна стверджувати, що щось подібне лежати - це дуже хороший спосіб сумління адміністраторів SAN.