Як досягти максимальної швидкості роботи з HDD
У певному сенсі ця нотатка не зовсім пряме відношення до IB. Частину наступних тверджень ви можете застосувати і до свого персонального комп'ютера, щоб підвищити швидкість його роботи.
Тут не розглядатимуться особливості SCSI-вінчестерів або RAID. Або йтиметься про підвищення швидкодії взагалі, або підвищення швидкості роботи з IDE-дисками. Розгін комп'ютера теж не розглядатиметься, тому що це скоріше спосіб підвищення нестабільності системи, і годиться хіба що для ігроманів.
Відступ по SCSI: проблемою для SCSI вінчестерів та IB є неправильна поведінка SCSI-драйвера у Windows NT. Полягає воно в тому, що коли NT виконує операцію FLUSH (вивантаження кеша на диск), до SCSI-вінчестера не може здійснюватися інших звернень. Виглядає це так - при роботі з IB комп'ютер періодично "завмирає" - індикатор звернень до HDD блимає, хоча завантаження процесора практично на нулі. Це може тривати від 1 до 20 хвилин (максимально зареєстрований час). Виправити проблему можна лише зменшенням розміру кешу IB – параметр DATABASE_CACHE_PAGES у файлі IBCONFIG. На інших операційних системах такої проблеми, схоже, немає.
Другий відступ по SCSI: за наявності на одній шині SCSI швидких і повільних пристроїв, сукупна продуктивність дорівнюватиме продуктивності самого повільного пристрою. Тому слід уникати підключення до шини, на якій знаходиться RAID, CD-ROM та стрічкових пристроїв. Для цього вам краще придбати окремий SCSI-контролер.
Відступ на тему розгону: справді, розгін процесора може призвести до періодичної появи "синього екрана" під Windows NT, або до падіння 95/98,що ще гірше. Навіть якщо розігнати процесор на 20%, то для РСУБД це навряд чи матиме сенс більшість операцій РСУБД виробляє з диском. А дискова підсистема працює набагато повільніше, ніж процесор та пам'ять. Через війну розгін комп'ютера дасть загальне підвищення продуктивність системи на 1-2%. У той самий час, будь-який з наведених далі пунктів може дати як мінімум 1.5-2 кратне підвищення швидкості роботи системи загалом.
Почнемо зопераційної системи. Windows95/98 – найгірший вибір як сервер для IB, оскільки ці операційні системи дуже погано працюють з віртуальною пам'яттю та багатозадачними програмами. Для IB немає різниці між Windows NT Server і Workstation, тому якщо комп'ютер не надто потужний, краще встановити Windows NT Workstation. Unix - теж непоганий вибір.
Швидкість роботи IDE вінчестерів можна суттєво підвищити (в 1.5-3 рази) шляхом встановлення драйвераBusMaster. Однак робити це рекомендується лише у випадку, коли материнська плата містить чіпсет, який підтримує роботу у режимі BusMaster. Без драйвера збільшення швидкості роботи з вінчестером не буде, навіть якщо купити вінчестер з підтримкою UltraATA/66. Для Windows98 встановлювати драйвер не потрібно, тому що він вже вбудований в систему - достатньо виставити у властивостях контролера HDD чекбокс "use DMA".
Докладніше про BusMaster див. http://www.ixbt.ru, FAQ по BusMaster.
Неявна робота з віртуальною пам'яттю
За суб'єктивними відчуттями, розміщення файлу віртуальної пам'яті на окремому HDD значно підвищує швидкість роботи комп'ютера. Можна взяти будь-який (навіть старий) IDE вінчестер розміром 500-1000 мегабайт (якщо знайдете такий), який працює мінімум у PIO MODE 3, створити на ньому файлову систему, та розмістити на ньому віртуальнупам'ять.
Зазначу також, що з Windows NT найкращі результати дає розмір віртуальної пам'яті в 2.5-3 разу більше, ніж фізичної пам'яті. Наприклад, на комп'ютері – 512Мб RAM. Отже, має сенс створити файл віртуальної пам'яті розміром 1.5 гігабайта. У цьому випадку повідомлення "out of virual memory" навряд виникне.
Робота з тимчасовими файлами
- При виконанні запитів із ORDER BY, коли неможливо використовувати індекс.
За замовчуванням IB створює тимчасові файли там, куди вказує системна змінна TEMP. Як правило, під Windows NT ця змінна вказує на каталог на диску, де розташована операційна система. Зазвичай на цьому диску трохи вільного місця (особливо, якщо за замовчуванням на цьому ж диску розташований файл віртуальної пам'яті), і часто виникає помилка error writing to file xxxxx.
Поміняти TEMP на інший диск можна через MyComputer/Properties/Environment, але краще цього не робити. Тут можна оголосити змінну INTERBASE_TMP, яка має вищий пріоритет стосовно змінної TMP.
Найкраще явно вказати розташування тимчасових файлів у конфігураційному файлі IBCONFIG. Це можна зробити тільки для IB 5.x, причому можна вказати кілька каталогів або дисків для розташування тимчасових файлів. Наприклад,
Файлова система
Для будь-якої файлової системи краще вибирати розмір сторінки бази даних 4К або 8К. За замовчуванням InterBase створює БД із розміром сторінки 1К, що дуже мало, і при великих обсягах даних будуть проблеми не лише зі швидкістю зчитування та оновлення, але й із глибиною індексів.
На NTFS найкраще вибрати розмір сторінки 4К, попередньо відформатувавши логічний диск із розміром блоку також 4К. Не рекомендується зберігати на цьому жлогічному диску інші файли, крім бази даних.
Для FAT є сенс зробити розмір сторінки відразу 8К.
Зрозуміло, якщо ви хочете виконати backup якнайшвидше навіть у звичайній конфігурації, то не забувайте вказати gbak.exe опцію -g, яка відключить складання сміття при backup. Це значно прискорить процес backup.
Складання сміття
Істотний вплив на читання даних може мати складання сміття. Докладно про цей процес (або явище) можна прочитати у статті "Складання сміття", але загальний зміст зводиться до наступного:
Складання сміття є видаленням непотрібних (застарілих) версій записів, і може відбуватися у двох випадках:
- Автоматичне складання сміття. Так званий sweep. Відбувається тоді, коли різниця між поточною транзакцією та oldest transaction (див. gstat -h) досягне значення sweep interval (за умовчанням 20000). Старт sweep може виявлятися як раптове уповільнення роботи протягом дня або за кілька днів після restore. Коли подібні "уповільнення" неприйнятні, є сенс відключити автоматичне складання сміття утилітою gfix (-housekeeping 0), і робити sweep вручну (тим самим gfix) або при backup (без ключа -g).
- Кооперативне складання сміття. Вона відбувається у разі, якщо транзакція, читає дані, виявляє нікому не потрібні версії записів. Виявити складання непотрібних версій можна лише у динамічній статистиці (page writes, isc_database_info) під час виконання запитів SELECT. Тим не менш, цю збірку сміття можна також повністю відключити, якщо працювати з компонентами прямого доступу, і для компонента Database вказати параметр no_garbage_collect (див. документацію IB API). При цьому збирання сміття буде заборонено, але база даних буде "зростати" через накопичення сміття.
Сподіваюся ви порахували, скільки вінчестерів вам знадобиться? TEMP і віртуальну пам'ять можна розмістити і одному, отже мінімум – 2. Т. е. одному – база даних, але в іншому – віртуальна пам'ять і TEMP. Файл бази даних можна розмістити на HDD, де знаходиться система, але обов'язково на окремому логічному диску. І бажано на цьому диску жодних інших файлів, крім бази даних, не розміщувати.
Ну а почати "прискорення" бажано не з додавання нових HDD, а з установки драйвера BusMaster.