Оцінка вимог до вводу-викидів для бурхливого використання


11

У нас є програма, яка періодично запитує базу даних SQL протягом дня. Існують періоди нульової або лише світлової активності, переплетені з індивідуальними запитами щодо відносно великої кількості даних. Коли ці запити надходять, першочерговою метою є швидка доставка даних, а другорядна мета - зробити це рентабельно. Зважаючи на характер програми, малоймовірно, що дані / індекси будуть кешовані в оперативній пам’яті з попереднього запиту (різні користувачі, що працюють на різних частинах даних).

У системі, яка користується відносно стабільним використанням, я почула правило, щоб спостерігати за довжиною черги диска і тримати це число відносно невеликим. Це буде спеціально працювати в AWS, де я бачив правило, що розмір черги на диску 1 на 100 IOPS є розумним.

Як я можу оцінити вимоги IO до такої системи? Чи є довжина черги диска надійним індикатором при роботі з індивідуальними, розмитими запитами? Чи є інші показники, які я повинен розглянути?


Чи є якісь записи, чи це важке для читання?
Джек каже, спробуйте topanswers.xyz

@JackDouglas: Це 98% читань. Існує дрібниця записів.
Ерік Дж.

1
Наступне запитання: чи розкидані читання чи, можливо, ваші "індивідуальні запити щодо відносно великої кількості даних" роблять послідовний IO?
Джек каже, спробуйте topanswers.xyz

@JackDouglas: Найбільші зчитування проводяться через індексований вигляд, таким чином, що пункт WHERE відповідає індексу, але повертає більше даних, ніж лише те, що є в індексі. Я не впевнений, що це означає для ступеня послідовного введення. Оскільки основна підсистема вводу-виводу - AWS EBS, я не впевнений, як це впливає на фізичний доступ.
Ерік Дж.

Базова підсистема вводу-виводу вплине на послідовність продуктивності , але піклуватиметься про розсіяний v послідовний доступ аналогічно локальному сховищу. Ці великі читають, скільки різних блоків вони зазвичай потрапляють? Само сканування індексів буде послідовним, але доступ до таблиці не буде, якщо я досі правильно вас зрозумів.
Джек каже, спробуйте topanswers.xyz

Відповіді:


10

Основною метрикою, яку я завжди вважав за IO в SQL Server, є не IOP або довжина черги диска, а пропускна здатність диска (сек / читання та сек / запис). Загалом, бази даних полягають не в тому, скільки операцій можна кинути на диск, а в тому, як швидко ці операції виконуються. Загальне правило - мати менше 20 мс / операція (хоча нижча завжди краще). Більш детально можна ознайомитися в цій статті .

Довжина черги диска - це нечітка статистика і більше не актуальна. Проблема полягає в тому, що значення вимірює чергу для одного диска, але тепер, коли ми живемо в епоху RAID, SAN та інших розподілених сховищ, немає ніякого способу правильно перевести це значення на значуще число. Чудовим початковим місцем для показників ефективності є цей плакат від Quest / Dell, який дає багато матеріалів та пояснень, чому вони важливі чи чому вони не важливі. Не потрібно використовувати їх усі, але вони - початок.

Для того щоб перевірити свій IO, ви повинні зрозуміти навантаження на піку. Скільки транзакцій і скільки кешується? Якщо ви не знаєте і не вимірювали їх, судити важко. Ви можете створювати робочі навантаження та використовувати такі інструменти, як SQLIO, щоб перевірити ваше сховище, але для створення належного тесту вам знадобляться шаблони навантаження.

Нарешті, примітка про AWS: Наскільки мені відомо, Amazon не гарантує продуктивність IO в AWS. Це перш за все тому, що сховище - це масивний спільний ресурс, і неможливо оцінити шаблони вас та ваших сусідів на певній області зберігання (див. Проблему Шумного сусіда ).

Моєю рекомендацією було б виділити якомога більше пам’яті. SQL Server буде витісняти речі з пам’яті лише у тому випадку, коли в буферному пулі знаходиться під тиском та простором (на основі LRU-K). Отже, якщо ви буферний пул може зберігати більшу частину бази даних у пам’яті, ви можете пом'якшити деяку функціональність. Також врахуйте тактику, яка може зберігати об’єкти кешу «теплими». Нарешті, слідкуйте за SQL 2014 та новою функцією Hekaton .


"SQL Server виштовхне речі з пам'яті лише у тому випадку, коли він знаходиться під тиском" або на контрольній точці ?
Джек каже, спробуйте topanswers.xyz

5
Контрольна точка не видаляє об'єкти з буфера, але записує брудні сторінки на диск для відновлення. Він все одно буде підтримувати об'єкти в буферному пулі.
Майк Фаль,

Дякую за детальну відповідь. Тепер AWS має функцію преміум-класу під назвою Provisioned IOPS, яка гарантує, що придбане число операцій вводу-виводу за секунду може виконувати 99,9% часу. Я думаю, що операція вводу-виводу визначається як читання або запис блоку даних 16K.
Ерік Дж.

@MikeFal: Чи є у вас думки щодо методології тестування, спеціально для цієї бурхливої ​​моделі? Просто запустіть один запит і перегляньте лічильники, про які йдеться? Виконати ряд (зазвичай періодичних) запитів один за одним, спостерігаючи за лічильниками?
Ерік Дж.

Так, я знайомий з PIOPS. Як я заявляю, я не хочу знати, скільки операцій можна виконати, я хочу знати, наскільки вони швидкі. І це не те, що можна гарантувати AWS, навіть на PIOP.
Майк Фаль,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.