- Идентификује кварове хардвера и софтвера, подешава временска ограничења и спречава лажно позитивне резултате приликом пресликавања.
- Исправља обрасце који смањују перформансе: N+1, WHERE функције и недостајуће индексе.
- Избегавајте SQL грешке (синтакса, редослед, алијаси) и лоше праксе дизајнирања (PK-ови, нормализација).
- Имплементирајте КЕДБ како бисте брзо и транспарентно решили понављајуће инциденте.
Циљ је да одете са јасним планом: зашто се ови проблеми јављају, како их открити и које мере предузети. Наћи ћете детаљне смернице о хардверским и софтверским грешкама у SQL Server-у (пресликавање) , обрасцима који умањују перформансе, уобичајеним грешкама у писању упита, класичним замкама моделирања/развоја и ITIL/ITSM приступу документовању и решавању понављајућих инцидената помоћу добро структуриране базе података са кључним грешкама (KEDB).
Грешке хардвера: знаци, узроци и време реакције
Физички кварови обично брзо постају очигледни јер друге системске компоненте упозоравају механизам базе података. Када се то деси, сервер одмах добија извештај о хардверској грешци , мада понекад постоје кашњења због мрежних или I/O тајмера који одлажу обавештење.
Уобичајени узроци укључују прекинуту везу или оштећен кабл , неисправну мрежну картицу, промене на рутеру или заштитном зиду, реконфигурацију крајње тачке, губитак диска на којем се налази дневник трансакција или грешке процеса/ОС-а. Ови проблеми, ако утичу на диск за дневник или мрежу, могу проузроковати било шта, од прекида везе до озбиљних поремећаја у репликацији или пресликавању базе података.
Имајте на уму да неке мрежне компоненте и одређени И/О подсистеми примењују сопствена интерна временска ограничења . Ова временска ограничења су независна од базе података и могу одложити откривање, повећавајући интервал између стварне грешке и тренутка када механизам постане свестан ње.
Да бисте боље разумели шта се дешава „на мрежи“, корисно је питати мрежни тим које поруке стижу на порт током типичних догађаја као што су прекиди DNS-а, искључени каблови, блокирање порта од стране заштитног зида , падови апликације која слуша на порту, промене имена сервера или поновно покретање система. Овај списак симптома убрзава дијагнозу када услуга изненада престане да ради.
Софтверске грешке и временска ограничења: када их поправити и како избећи лажно позитивне резултате
Кварови у софтверу не комуницирају сами од себе: сервер би могао да остане неактиван неограничено дуго без механизма за праћење. Стога, у сценаријима као што је пресликавање базе података, инстанце се периодично пингују и ако се не прими сигнал у договореном временском оквиру, сматра се да је дошло до проблема.
Међу условима који покрећу ова времена чекања су мрежне грешке (TCP временски истеци, оштећени, изгубљени или погрешно уређени пакети) , оперативни систем/сервер/база података који не реагује, истеци на нивоу Windows-а и недостатак ресурса: засићење диска или процесора, 100% дневник трансакција, недовољно меморије или нити.
Ако се нађете у овој ситуацији, можете да повећате време чекања, смањите оптерећење или надоградите хардвер како би се носио са захтевима. Прениско подешавање времена чекања доводи до лажно позитивних резултата; превисоко подешавање одлаже одговор на стварне кварове.
Механизам пинг/тајм-аут у огледалу SQL Server-а
Да би свака веза остала активна, свака инстанца шаље пингове у фиксном интервалу. Ако се пинг прими у оквиру временског ограничења (плус време слања) , претпоставља се да је комуникација активна и тајмер се ресетује. Ако пинг не стигне у том интервалу, сматра се да је време истекло и веза се затвара, а догађај се обрађује у складу са улогом и режимом рада.
Чак и ако други сервер ради исправно, време чекања се сматра кваром . Ако је конфигурисана вредност прекратка за нормално кашњење окружења, појавиће се „фантомске“ грешке. Стога се препоручује да се не иде испод 10 секунди.
У режиму високих перформанси, време чекања је увек 10 секунди ; ово је обично довољно да се избегну лажно позитивни резултати. У режиму високе безбедности, подразумевана вредност је такође 10 секунди, али се може подесити; подесите је на 10 секунди или више у овом режиму ако је мрежа спора.
Ако је потребно да је промените, имајте на уму да је ова модификација специфична за сесије са високим нивоом безбедности . Можете је прегледати и изменити из администрације система или користећи T-SQL, у зависности од ваше верзије и смерница.
Како сервер реагује када дође до грешке
У случају било које врсте грешке, инстанца делује у складу са својом улогом (примарна/сведок/секундарна), режимом рада и статусом везе . Ако се партнер изгуби, понашање се разликује у зависности од тога да ли смо у режиму високих перформанси или режиму високе безбедности са сведоком, тако да је кључно документовати режим рада сваке сесије како би се предвидели застоји и пребацивања.
Шаблони који убијају перформансе у SQL-у (и како их поправити)
Постоје четири веома честа „греха“ која непотребно погоршавају латенцију. Лако их је уочити, а њихово избегавање ће уштедети процесор, улазно/излазне операције и приступ бази података од првог дана.
Упити унутар петљи: извршавање упита по итерацији (класични N+1) множи путовања и кашњење. Преузмите све податке одједном помоћу уније или IN, или користите пакетне упите. Обрадите логику у свом коду користећи структуре које су већ учитане у меморију.
Учитавање превише података – преузимање колона и редова које нећете користити – је као коришћење маља за разбијање ораха. Филтрирајте базу података, изаберите само оно што је неопходно , користите пагинацију ако је потребно и избегавајте SELECT * осим ако немате јасан разлог.
Функције у WHERE клаузули: Примена LOWER(), DATE() или других на колоне често спречава употребу индекса. Боље је упоређивати без трансформације колоне: прво претходно обрадити податке или трансформисати литерал. На пример, филтрирати по опсегу датума користећи колоне датума/времена без њиховог умотавања у функције.
Недостајући индекси: Заборављање индекса на колонама које филтрирају или спајају је као тражење потпуног скенирања. Периодично проверавајте где ваша апликација филтрира/спаја и креирајте одговарајуће индексе (композитне индексе када је потребно). Равнотежа: Превише индекса кажњава писање.
Типичне грешке при писању SQL-а: синтакса, редослед и двосмислености
Већина грешака које праве почетници (па чак и неки искуснији корисници) повезана је са синтаксом и SQL инјекцијом . База података не разуме шта јој тражите и жали се. Уређивач са истицањем текста помаже, али познавање уобичајених грешака убрзава процес.
Погрешно написане речи: Грешке са FROM, WHERE или називима табела/колона су честе. Поруке обично указују на то где парсер не успева . Користите едитор са истицањем и аутоматским довршавањем; ако кључна реч није истакнута, будите сумњичави.
Заграде и наводници: Недостатак заграда или наводника ствара тешко уочљив проблем. Запамтите приоритет оператора (И/ИЛИ) и групишите текст заградама. У текстуалним литералима, избегавајте унутрашње наводнике или наизменично користите једноструке и двоструке наводнике како бисте избегли прекидање низа (нпр. О'Рајли).
Неважећи редослед у SELECT-у: исправан редослед је SELECT → FROM → WHERE → GROUP BY → HAVING → ORDER BY . Промена редоследа у ORDER BY или HAVING ће изазвати грешке. Запамтите ово или држите при руци шпаргалку.
Изоставите алијасе табела: Приликом самоспајања или када две табеле имају колоне са истим именом, добићете грешку „двосмислена колона“. Користите кратке, јасне алијасе и референцирајте колоне са `alias.column`. Ово такође чини SQL читљивијим.
Називи који разликују велика и мала слова или посебни називи: Ако инсистирате на коришћењу назива који разликују велика и мала слова или размаке, мораћете да их наведете под двоструким наводницима у зависности од претраживача. Најбоље је избегавати ова имена; у супротном, будите доследни када их наводите.
Уобичајене грешке у развоју база података
Поред писања упита, постоје дизајнерске одлуке које праве разлику на средњи и дужи рок. Ево пет уобичајених грешака у развоју, заједно са тим шта треба учинити уместо тога да би се заштитио интегритет и одрживост.
Прекомерна употреба складиштених процедура: Корисне су, али са модерним ORM-овима и слојевима приступа, више не морате да стављате сву своју логику у њих. Складиштене процедуре имају трошкове одржавања и верзирања ; креирајте складиштене процедуре за приступ подацима када је то оправдано, а не за пословну логику апликације.
Избегавајте коришћење примарних кључева: делегирање јединствености приказима, складиштеним процедурама или апликацији умножава сложеност и грешке. Дефинишите стварне примарне кључеве у свим табелама и користите јединствене кључеве где је то прикладно; ово ће спречити постдедупликацију и крхке упите.
Тврдо брисање уместо меког брисања: Физичко брисање података компликује ревизије и опоравак од „упс, забрљао сам“. За многе случајеве употребе, додајте заставицу активно/неактивно (меко брисање) и искључите је из упита. Физичко брисање оставите за контролисано чишћење.
База података познатих грешака (KEDB): Шта је то и зашто је добра идеја за вас
У операцијама се не може све решити тренутно. Привремена решења (заобилазница) су неизбежна због ограничених ресурса, сложености или потребе за континуитетом пословања . KEDB је спремиште где се документује свака позната грешка, њен узрок (ако постоји) и њено привремено или трајно решење.
Део је ITIL оквира и пресеца се са управљањем проблемима и управљањем знањем. Када се појави понављајући инцидент, тим консултује KEDB, примењује проверено решење и смањује време застоја уместо да почиње од нуле.
Предности за кориснике: брже решавање, мање прекида и предвидљивији резултати . За ИТ: ефикасност (нема потребе за поновним измишљањем топле воде), задржавање знања упркос флуктуацији запослених и подаци за континуирано побољшање. За заинтересоване стране: транспарентност, информисане одлуке о капацитету/ризику и уштеде трошкова.
Како корак по корак имплементирати ефикасан КЕДБ
1) Дефинишите обим и циљеве: одлучите који су кварови укључени (софтвер, хардвер, мрежа или одређене области), како су класификовани и које циљеве тежите да остварите ( смањење MTTR-а, побољшање задовољства итд.). Дајте приоритет критичним системима и услугама и ускладите обим са пословним циљевима и SLA-овима.
Водећа питања: Да ли покрива све или почињемо са најзначајнијим проблемима? Да ли првенствено желимо да скратимо време решавања или и да откријемо обрасце ради превенције?
2) Прикупљање и документовање: Сарађујте са Одељењем за управљање инцидентима/проблемима и тимовима како бисте забележили понављајуће грешке и ефикасна решења која још нису документована. Користите једноставан шаблон са пољима као што су опис, узрок (ако је познат), привремено/трајно решење, утицај, датуми и напомене.
Савети: јасан језик, кораци које је могуће предузети, корисне класификације, повезивање повезаних инцидената и ажурирање уноса када се појаве нови догађаји.
3) Изаберите алат: Потребна вам је добра претрага, категоризација/означавање, везе између ставки, скалабилност, извештавање и могућност интеграције са вашом ITSM платформом. Дајте приоритет корисничком интерфејсу како бисте подстакли усвајање; размотрите претрагу засновану на вештачкој интелигенцији и прилагодљиве токове рада.
4) Обучите тимове: научите их како да ефикасно документују, ефикасно претражују и одржавају квалитет. Укључите практичне вежбе са случајевима из стварног света , кратке водиче, видео записе, менторство и редовне курсеве освежавања знања. Подстичите повратне информације како бисте побољшали процес.
5) Одржавање и побољшање: Дефинисати одговорности, кључне индикаторе учинка (KPI) и циклус прегледа (месечно за критична питања, квартално за све остало). Успоставити рецензију нових уноса од стране колега, континуирану документацију након сваког проблема и канал за повратне информације од корисника и подршке.
6) Промовисати његову употребу: водити интерну кампању, препознати оне који највише доприносе и неговати сарадњу између одељења (мрежа, софтвер, хардвер). Интегрисати KEDB у културу услуга тако да постане прво место које људи траже.
КЕДБ наспрам базе знања (КДБ): кључне разлике
KEDB се фокусира на познате кварове и њихова решења (привремена или трајна), уско повезана са управљањем проблемима и инцидентима. Обично је интегрисана са ITSM-ом , а њена примарна публика је технички тим који решава инциденте.
КЕДБ обухвата много више: најбоље праксе, процедуре, податке о конфигурацији, чланке помоћи и још много тога. Његово одржавање је опсежније, са ревизијама процедура и најбољих пракси поред техничких чланака. Укратко: КЕДБ је специјализовани подскуп „када ово не успе, урадите ову другу ствар“.
Као што видите, стабилност и перформансе базе података зависе подједнако од разумевања физичких и логичких кварова (и времена њиховог откривања) као и од писања доброг SQL-а, интелигентног моделирања и организовања оперативног знања. Ако исправите четири обрасца перформанси, избегнете типичне синтаксичке грешке, дизајнирате са јаким примарним кључевима и разумном нормализацијом, а такође подесите систем за управљање базама података уживо (KEDB), имаћете бржу, предвидљивију и лакшу за коришћење платформу, чак и када ствари крену по злу.