SQL Server. Анализ на използването на параметрите на процедурата

търсене нещо

Повечето бази данни, които съм виждал, имат „общи“ процедури с много параметри. Като правило това са процедури за търсене на нещо в базата данни или процедури, които формират набор от данни за отчет. Освен това, колкото повече параметри, толкова по-рядко се използват.
Тоест процедурата може например да търси клиент по име, част от името, клиентски номер, номер на акаунт, но естествено се използват едновременно много ограничен брой параметри. Всъщност при търсене на клиент по някой от неговите уникални номера (TIN, SNILS, IKK и др.) Няма
има смисъл да се изясни пълното му име или град на пребиваване.
Вътре в процедурите по правило има една „основна“ „универсална“ заявка, която отчита всички параметри по време на филтрирането. Както всичко универсално, няма да се изпълни бързо, дори ако "покриете" цялата таблица с индекси - индексите са добри за търсене на нещо конкретно.

За да оптимизирам такива общи процедури, бих препоръчал да започнем с дефинирането на най-типичните, често използвани варианти на комбинации от действително използваните параметри и тези комбинации да прилагат отделни специализирани заявки. По време на оптимизацията само 4 комбинации от параметри на процедурата за търсене бяха използвани не само в 95% от извикванията на процедурата, но и създадоха до 10% от общото натоварване на сървъра.

След разделянето на тези случаи на употреба в отделни заявки, натоварването на сървъра беше намалено с тези 10%.

Анализирането на това кои параметри всъщност се използват при извикване на процедура не е най-тривиалната задача.
Няма да говоря за всички възможни усложнения при анализирането на сървърни следи за намиране на такива параметри, а само ще кажа, че в последния случай на оптимизация такъв анализ би бил нетривиална задача сама по себе си - процедурите се изпълняват чрез повиквания, използващи sp_prepare и името на процедурата не се използва по време на действителното й изпълнение. Също така, синтактичният анализ на действителното използване на параметрите изисква анализиране на заявката.

Но всичко е по-лесно да се реши - регистриране на параметри може да се добави към самата процедура. Освен това ще добавим и информация за запазване и продължителността на изпълнението на заявката, логически показания и друга сервизна информация, която може да е необходима за анализ на проблеми с производителността.

И така, да предположим, че нашата има процедура за търсене като тази: