Салом.
Номи ман Ваня ва ман таҳиягари Java ҳастам. Чунин мешавад, ки ман бо PostgreSQL бисёр кор мекунам - таъсиси пойгоҳи додаҳо, оптимизатсияи сохтор, иҷроиш ва дар рӯзҳои истироҳат каме DBA бозӣ мекунам.
Ба наздикӣ ман якчанд пойгоҳи додаҳоро дар микросервисҳои худ тартиб додам ва китобхонаи java навиштам
Радди
Версияи асосии PostgreSQL, ки ман бо он кор мекунам, 10 аст. Ҳама дархостҳои SQL, ки ман истифода мебарам, инчунин дар версияи 11 санҷида мешаванд. Версияи ҳадди ақали дастгирӣ 9.6 аст.
prehistory
Ҳамааш тақрибан як сол пеш аз як вазъияте оғоз ёфт, ки барои ман аҷиб буд: эҷоди рақобати индекси ғайриоддӣ бо хатогӣ анҷом ёфт. Худи индекс, чун маъмул, дар базаи маълумот дар ҳолати беэътибор монд. Таҳлили гузоришҳо камбудиҳоро нишон дод
Мушкилоти як - конфигуратсияи пешфарз
Эҳтимол ҳама аз метафора дар бораи Postgres хеле хаста шудаанд, ки онро дар қаҳвапаз кор кардан мумкин аст, аммо ... конфигуратсияи пешфарз воқеан як қатор саволҳоро ба миён меорад. Дар ҳадди аққал, ба он диққат додан лозим аст нигоҳдории_кори_мем, temp_file_limit, изҳорот_вахт и lock_timeout.
Дар мавриди мо нигоҳдории_кори_мем пешфарз шуд 64 MB, ва temp_file_limit чизе тақрибан 2 ГБ - мо танҳо хотираи кофӣ надоштем, то дар ҷадвали калон индекс эҷод кунем.
Бинобар ин, дар pg-index-тандурустӣ Ман як силсила ҷамъоварӣ кардам
Масъалаи дуюм - индексҳои такрорӣ
Пойгоҳи додаҳои мо дар дискҳои SSD зиндагӣ мекунанд ва мо истифода мебарем HA-конфигуратсия бо якчанд марказҳои додаҳо, мизбони усто ва n- шумораи нусхаҳо. Фазои диск барои мо манбаи хеле арзишманд аст; он на камтар аз иҷрои ва истеъмоли CPU муҳим аст. Аз ин рӯ, аз як тараф, ба мо индексҳо барои хондани зуд ниёз доранд ва аз тарафи дигар, мо намехоҳем индексҳои нолозимро дар пойгоҳи додаҳо бинем, зеро онҳо ҷойро мехӯранд ва навсозии маълумотро суст мекунанд.
Ва ҳоло, ки ҳама чизро барқарор кард
Масъалаи сеюм - индексҳои буриш
Аксари таҳиягарони навкор индексҳоро дар як сутун эҷод мекунанд. Оҳиста-оҳиста, пас аз таҷриба кардани ин тиҷорат, одамон ба оптимизатсия кардани дархостҳои худ шурӯъ мекунанд ва индексҳои мураккабтареро, ки якчанд сутунро дар бар мегиранд, илова мекунанд. Индексҳо дар сутунҳо ҳамин тавр пайдо мешаванд A, A + B, A+B+C ва ғайра. Ду аввали ин индексҳоро метавон бехатар хориҷ кард, зеро онҳо префикси сеюм мебошанд. Ин инчунин фазои зиёди дискро сарфа мекунад ва барои ин ташхис вуҷуд дорад
Масъалаи чорум - калидҳои хориҷӣ бе индекс
Postgres ба шумо имкон медиҳад, ки маҳдудиятҳои калиди хориҷиро бидуни муайян кардани индекси пуштибонӣ эҷод кунед. Дар бисёр ҳолатҳо ин мушкилот нест ва ҳатто метавонад худро зоҳир накунад... Дар ҳоли ҳозир...
Бо мо низ ҳамин тавр буд: танҳо дар як вақт коре, ки мувофиқи ҷадвал кор мекунад ва базаи фармоишҳои санҷиширо тоза мекунад, аз ҷониби мизбон ба мо "илова карда" шуд. CPU ва IO барбод рафтанд, дархостҳо суст шуданд ва мӯҳлаташон гузашт, хидмат панҷсад буд. Таҳлили зуд
delete from <table> where id in (…)
Дар ин ҳолат, албатта, дар ҷадвали ҳадаф индекс аз рӯи id мавҷуд буд ва аз рӯи шарт хеле кам сабтҳо нест карда шуданд. Чунин менамуд, ки ҳама чиз бояд кор кунад, аммо афсӯс, ки ин тавр нашуд.
Аҷиб ба наҷот омад таҳлил фаҳмонед ва гуфт, ки ба ғайр аз нест кардани сабтҳо дар ҷадвали мавриди ҳадаф, боз як санҷиши якпорчагии истинод вуҷуд дорад ва дар яке аз ҷадвалҳои алоқаманд ин санҷиш ноком мешавад. скани пайдарпай аз сабаби набудани индекси мувофик. Ҳамин тариқ, ташхис ба вуҷуд омад
Масъалаи панҷум – арзиши нул дар индексҳо
Бо нобаёнӣ, Postgres арзишҳои нулро дар индексҳои btree дар бар мегирад, аммо онҳо одатан дар он ҷо лозим нестанд. Аз ин рӯ, ман кӯшиш мекунам, ки ин нулҳоро (диагностика where <A> is not null
. Бо ин роҳ ман тавонистам андозаи як индекси моро аз 1877 МБ то 16 КБ кам кунам. Ва дар яке аз хидматҳо, андозаи пойгоҳи додаҳо дар маҷмӯъ 16% (бо рақамҳои мутлақ 4.3 ГБ) аз ҳисоби хориҷ кардани арзишҳои нул аз индексҳо коҳиш ёфт. Пасандозҳои бузург дар фазои диск бо тағиротҳои хеле оддӣ. 🙂
Мушкилоти шашум - набудани калидҳои ибтидоӣ
Аз сабаби хусусияти механизм
Як рӯз, як муҳоҷирати олиҷаноб тамоми сабтҳоро дар ҷадвали калон ва фаъол истифода бурд ва навсозӣ кард. Мо ба андозаи ҷадвал +100 ГБ гирифтем. Ин хеле шармовар буд, аммо нохушиҳои мо бо ин тамом нашуданд. Пас аз он ки автовакуум дар ин миз пас аз 15 соат ба охир расид, маълум шуд, ки ҷойгиршавии физикӣ барнагардад. Мо наметавонистем хидматро боздорем ва ВАКУУМро пур кунем, бинобар ин мо тасмим гирифтем, ки истифода барем
Дар нусхаи китобхона 0.1.5 Имконияти ҷамъоварии маълумот аз ҷадвалҳо ва индексҳо ва посух додан ба он сари вақт илова карда шудааст.
Масъалаҳои ҳафт ва ҳаштум - нишондиҳандаҳои нокифоя ва нишондиҳандаҳои истифоданашуда
Ду ташхиси зерин инҳоянд:
Тавре ки ман аллакай навишта будам, мо конфигуратсияро бо якчанд нусхабардорӣ истифода мебарем ва сарбории хониш дар ҳостҳои гуногун комилан фарқ мекунад. Дар натиҷа, вазъият маълум мешавад, ки баъзе ҷадвалҳо ва индексҳо дар баъзе ҳостҳо амалан истифода намешаванд ва барои таҳлил шумо бояд омори ҳама хостҳои кластерро ҷамъ кунед.
Ин равиш ба мо имкон дод, ки тавассути нест кардани индексҳои ҳеҷ гоҳ истифоданашуда, инчунин илова кардани индексҳои гумшуда ба ҷадвалҳои кам истифодашаванда якчанд даҳҳо гигабайтро сарфа кунем.
Хулоса
Албатта, барои қариб ҳама ташхис шумо метавонед танзим кунед
Баъзе ташхисҳоро метавон дар озмоишҳои функсионалӣ фавран пас аз интиқоли интиқоли пойгоҳи додаҳо анҷом дод. Ва ин шояд яке аз хусусиятҳои пурқуввати китобхонаи ман бошад. Намунаи истифодаро дар он пайдо кардан мумкин аст
Тафтиши индексҳои истифоданашуда ё гумшуда, инчунин барои bloat, танҳо дар пойгоҳи додаҳои воқеӣ маъно дорад. Қиматҳои ҷамъшударо метавон дар қайд кард
Ман дар ҳақиқат умедворам pg-index-тандурустӣ муфид ва серталаб хоҳад буд. Шумо инчунин метавонед тавассути гузориш додани мушкилоти пайдошуда ва пешниҳоди ташхиси нав дар рушди китобхона саҳм гузоред.
Манбаъ: will.com