Як визначити, скільки часу буде виконуватися запит до бд

Ясно. Мудрі товариші кажуть. що немає в м'язі подібних засобів прогнозування, і є тільки можливість приблизної оцінки на основі менших вибірок / * плюсанул відповідь papersaltserver * /.

До питання, чому в СУБД немає вбудованих засобів прогнозування: мабуть, це дуже дорого з точки зору розробки / дуже довго з точки зору виконання прогнозу / дає дуже приблизний підрахунок / все вищеперелічене.

Поверхневе гугленіе показало, що є така штука для Оракл - Discoverer - але і він робить дуже грубий і дуже приблизний розрахунок виходячи з попередніх запитів.

Їх немає тому, що прогнозувати це неможливо. Тільки припускати. Ось припускаєте ви, що виконаєте роботу для начальства за одну годину. А тут приходить інше, куди більш високе начальство і каже: «кидай все, пішли зі мною».

тепер давайте на базу даних це спроеціруем:

insert into tbl_supertest (id, value)
select v.id_value, v.value from
tbl_value v
join tbl_valuedetail vd on v.id_value = vd.id_value

скільки часу буде виконуватися подібний запит на 10 рядках? Політична повія Троцький скаже: «так за нуль секунд!» - і буде, як завжди, в корені не правий. Блокіровочкі! Інший процес взяв, і повів таблицю tbl_supertest з собою в режимі - запис заборонена. І? Поки він її не віддасть, ніякої роботи не буде. Звичайно, ми з вами можемо порахувати поки швидкість виконання селекта - але це тут, в найпростішому варіанті.

А якщо ми пишемо процедуру, і без даних в таблиці tbl_supertest - далі нічого працювати не буде взагалі? І це ще найпростіший варіант.

Тепер поки ви там сидите і намагаєтеся виконати запит з селект - приходить ще сто тисяч користувачів і починають писати в таблицю tbl_value - після чого записів в ній стає не 10, а сто мільйонів. А індекс ми забули з вами створити на tbl_valuedetail.id_value. Чи позначиться це на часі виконання? А через хвилину нас осінило з вами, і ми індекс таки створили. Чи позначиться це на часі виконання?

І це я ще не врахував наявність вільної пам'яті, швидкість вашого жорсткого диска, знехтував фоновими процесами і ще десятком важливих деталей. Розумієте, чому це можна говорити лише дуже грубо?

Не в сенсі: «Начальник, відвали з дебільні питанням!», А в сенсі «В мультіюзерной і мультизадачной середовищі відповісти на питання ТОЧНО - неможливо. Даєте змогу отримувати доступ - буде приблизно стільки-то ».

Схожі статті