
Falsafiy kirish
Ma'lumki, muammolarni hal qilishning faqat ikkita usuli mavjud:
- Tahlil usuli yoki deduksiya usuli yoki umumiydan xususiyga.
- Sintez usuli yoki induksiya usuli yoki xususiydan umumiyga.
"Ma'lumotlar bazasi ish faoliyatini yaxshilash" muammosini hal qilish uchun shunday bo'lishi mumkin.
Tahlil β biz muammoni uning alohida qismlariga ajratamiz va ularni hal qilish orqali biz umuman maΚΌlumotlar bazasi faoliyatini yaxshilashga harakat qilamiz.
Amalda, tahlil quyidagicha ko'rinadi:
- Muammo yuzaga keldi (ishlash hodisasi)
- Biz ma'lumotlar bazasi holati haqida statistik ma'lumotlarni yig'amiz
- Biz to'siqlarni qidirmoqdamiz.
- To'siqlardan muammolarni hal qilish
Ma'lumotlar bazasi to'siqlari β infratuzilma (CPU, Xotira, Disklar, Tarmoq, OS), sozlamalar (postgresql.conf), so'rovlar:
Infrastruktura: muhandis uchun ta'sir qilish va o'zgarish imkoniyatlari deyarli nolga teng.
Ma'lumotlar bazasi sozlamalari: o'zgarishlar imkoniyatlari oldingi holatga qaraganda biroz kattaroqdir, lekin qoida tariqasida ular hali ham juda qiyin, ayniqsa bulutlarda.
so'rovlar ma'lumotlar bazasiga: manevr uchun yagona joy.
Sintez β Biz alohida qismlarning ishlashini yaxshilaymiz, natijada ma'lumotlar bazasining ishlashi yaxshilanadi deb umid qilamiz.
Lirik kirish yoki bularning barchasi nima uchun kerak
Ma'lumotlar bazasi ishlashi nazorat qilinmasa, samaradorlik hodisasini hal qilish jarayoni qanday ishlaydi?
Xaridor: "Biz yomon ish qilyapmiz, bu juda uzoq davom etmoqda, buni biz uchun yaxshilang."
Muhandis - "Bu qanday yomon?"
Xaridor: "Hozir shunday (bir soat oldin, kecha, oxirgi ishda), sekin."
Muhandis: "Bu qachon yaxshi edi?"
Xaridor: "Bir hafta (ikki hafta) oldin yaxshi edi." (Bu omadli edi.)
Xaridor: "Men qachonlar yaxshi bo'lganini eslay olmayman, lekin hozir ular yomon." (Oddiy javob)
Natijada klassik rasm paydo bo'ladi:

Kim aybdor va nima qilish kerak?
Savolning birinchi qismiga javob berish eng oson: DBA muhandisi har doim aybdor.
Ikkinchi qismga ham javob berish juda qiyin emas: siz ma'lumotlar bazasi ishlashini monitoring qilish tizimini joriy qilishingiz kerak.
Birinchi savol tug'iladi - Nimani kuzatish kerak?
Variant 1: HAMMANI kuzatib boring

CPU yuki, diskni o'qish/yozish operatsiyalari, ajratilgan xotira hajmi va har qanday ko'proq yoki kamroq funktsional monitoring tizimi ta'minlay oladigan boshqa ko'plab hisoblagichlar.
Natijada bir tonna grafiklar, pivot jadvallar va doimiy elektron pochta xabarlari paydo bo'ladi, muhandis 100% bir xil chiptalarni hal qilish bilan band bo'lib, odatda standart so'zlar bilan: "Vaqtinchalik muammo. Hech qanday harakat talab etilmaydi." Lekin hamma band va mijozga koβrsatish uchun doim nimadir bor β ish qizgβin ketmoqda.
Yo'l 2. Faqat kerakli narsani kuzatib boring, kerak bo'lmaganini esa nazorat qilish shart emas.
Siz uni biroz boshqacha kuzatishingiz mumkin - faqat ob'ektlar va hodisalar:
- Qaysi bir DBA muhandisi ta'sir qilishi mumkin
- Buning uchun hodisa sodir bo'lganda yoki ob'ekt o'zgarganda harakatlar algoritmi mavjud.
Ushbu taxmin va eslash asosida "Falsafiy kirish"muntazam takrorlanishning oldini olish uchun"Lirik kirish yoki bularning barchasi nima uchun kerak"Optimallashtirish va tahlil qilish uchun individual so'rovlar ishlashini kuzatish maqsadga muvofiq bo'lar edi, bu oxir-oqibat butun ma'lumotlar bazasining ishlashini yaxshilashga olib kelishi kerak.
Ammo ma'lumotlar bazasining umumiy ishlashiga ta'sir qiladigan og'ir so'rovni yaxshilash uchun avval uni topishingiz kerak.
Shunday qilib, o'zaro bog'liq ikkita savol tug'iladi:
- Qaysi so'rov qiyin deb hisoblanadi?
- Murakkab so'rovlarni qanday qidirish kerak.
Shubhasiz, og'ir so'rov natijani ishlab chiqarish uchun juda ko'p OS resurslaridan foydalanadigan so'rovdir.
Keling, ikkinchi savolga o'tamiz: og'ir so'rovlarni qanday qidirish va keyin nazorat qilish kerak?
PostgreSQL qanday so'rovlarni kuzatish imkoniyatlariga ega?
Oracle bilan solishtirganda, ko'p variantlar mavjud emas, lekin shunga qaramay, siz ba'zi narsalarni qilishingiz mumkin.

PG_STAT_STATEMENTS
Standart pg_stat_statements kengaytmasi PostgreSQL-da og'ir so'rovlarni qidirish va kuzatish uchun mo'ljallangan.
Kengaytmani o'rnatgandan so'ng, maqsadli ma'lumotlar bazasida bir xil nomdagi ko'rinish paydo bo'ladi, u monitoring maqsadlarida ishlatilishi kerak.
Monitoring tizimini yaratish uchun pg_stat_statements ning maqsadli ustunlari:
- so'rov id Operatorning tahlil daraxti orqali hisoblangan ichki xesh-kod
- maksimal_vaqt Operatorga sarflangan maksimal vaqt, millisekundlarda
Ushbu ikki ustun bo'yicha statistik ma'lumotlarni to'plash va ishlatish orqali siz monitoring tizimini qurishingiz mumkin.
PostgreSQL ishlashini kuzatish uchun pg_stat_statements dan qanday foydalanish kerak

So'rovlar bajarilishini nazorat qilish uchun quyidagilar qo'llaniladi:
Maqsadli ma'lumotlar bazasi tomonida pg_stat_statements ko'rinishi
Tomonidan server va monitoring ma'lumotlar bazalari - bash skriptlari va xizmat jadvallari to'plami.
1-bosqich - statistik ma'lumotlarni yig'ish
Monitoring xostida pg_stat_statements ko'rinishi mazmunini maqsadli ma'lumotlar bazasidan monitoring ma'lumotlar bazasidagi pg_stat_history jadvaliga ko'chiradigan cron orqali muntazam ravishda skript ishga tushiriladi.
Bu unumdorlik hisobotlarini yaratish va ko'rsatkichlarni sozlash uchun ishlatilishi mumkin bo'lgan individual so'rovlar ijrosi tarixini yaratadi.
2-bosqich - samaradorlik ko'rsatkichlarini o'rnatish
Yig'ilgan ma'lumotlarga asoslanib, biz mijoz (ilova) uchun eng muhim/muhim bo'lgan so'rovlarni tanlaymiz. Mijoz bilan maslahatlashgan holda, biz so'rov va max_time maydonlaridan foydalangan holda ishlash ko'rsatkichlarini o'rnatamiz.
Natija - ishlash monitoringi boshlanishi
- Ishlayotganda, monitoring skripti sozlangan ishlash ko'rsatkichlarini metrikaning maksimal_vaqt qiymatini maqsadli ma'lumotlar bazasidagi pg_stat_statements ko'rinishidagi qiymat bilan solishtirish orqali tekshiradi.
- Agar maqsadli ma'lumotlar bazasidagi qiymat metrik qiymatdan oshsa, ogohlantirish hosil bo'ladi (chipta tizimidagi voqea)
Qo'shimcha xususiyat 1
So'rovni bajarish rejasi tarixi
Ishlash bilan bog'liq hodisalarni keyingi hal qilish uchun so'rovlarni bajarish rejalariga kiritilgan o'zgarishlar tarixiga ega bo'lish juda foydali.
Log_query xizmat jadvali tarixni saqlash uchun ishlatiladi. Ushbu jadval yuklab olingan PostgreSQL jurnal faylini tahlil qilish orqali to'ldiriladi. Jurnal fayli, pg_stat_statements ko'rinishidan farqli o'laroq, normallashtirilgan matndan ko'ra, bajarilish parametrlari qiymatlarining to'liq matnini saqlaganligi sababli, nafaqat so'rovlar vaqtlari va davomiyliklarini qayd etish, balki joriy vaqtda bajarish rejalarini ham saqlash mumkin.
Qo'shimcha xususiyat 2
Doimiy ishlashni yaxshilash jarayoni
Alohida so'rovlar monitoringi odatda ma'lumotlar bazasining umumiy ish faoliyatini doimiy ravishda yaxshilash uchun mo'ljallanmagan, chunki u faqat individual so'rovlar uchun ishlash muammolarini nazorat qiladi va hal qiladi. Biroq, bu usulni kengaytirish va so'rovlar monitoringini butun ma'lumotlar bazasi uchun sozlash mumkin.
Buning uchun siz qo'shimcha ishlash ko'rsatkichlarini kiritishingiz kerak:
- So'nggi kunlarda
- Asosiy davr uchun
Skript maqsadli ma'lumotlar bazasidagi pg_stat_statements ko'rinishidan so'rovlarni tanlaydi va max_time qiymatini o'rtacha max_time qiymati bilan solishtiradi, birinchi holatda oxirgi kunlar yoki tanlangan vaqt davri (bazaviy), ikkinchi holatda.
Shunday qilib, agar har qanday so'rov uchun unumdorlik pasaysa, hisobotlarni qo'lda tahlil qilmasdan avtomatik ravishda ogohlantirish hosil bo'ladi.
Sintezning bunga qanday aloqasi bor?
Ta'riflangan yondashuvda, sintez usuli taklif qilganidek, tizimning alohida qismlarini takomillashtirish orqali biz butun tizimni yaxshilaymiz.
- Ma'lumotlar bazasi tomonidan bajarilgan so'rov - tezis
- O'zgartirilgan so'rov - Antiteza
- Tizim holatining o'zgarishi - sintez

Tizimning rivojlanishi
- pg_stat_activity tizimi ko'rinishi uchun tarix qo'shish orqali to'plangan statistikani kengaytirish
- So'rovlarga jalb qilingan alohida jadvallar statistikasi uchun tarixni qo'shish orqali to'plangan statistik ma'lumotlarni kengaytirish
- AWS bulutli monitoring tizimi bilan integratsiya
- Va yana bir narsani o'ylash mumkin ...
Manba: www.habr.com
