portaldacalheta.pt
  • Главни
  • Агиле Талент
  • Финансијски Процеси
  • Дизајн Бренда
  • Трендови
Наука О Подацима И Базе Података

Подешавање перформанси СКЛ базе података за програмере



СКЛ подешавање перформанси може бити невероватно тежак задатак, посебно када се ради са великим подацима, где и најмања промена може имати драматичан (позитиван или негативан) утицај на перформансе.

У средњим и великим компанијама већину подешавања перформанси СКЛ-а обављаће Администратор базе података (ДБА). Али верујте ми, има их доста програмера који морају да обављају задатке сличне ДБА. Даље, у многим компанијама сам то видео урадити имају ДБА, често се боре да добро сарађују са програмерима - позиције једноставно захтевају различите начине решавања проблема, што може довести до неслагања међу колегама.



најбоље праксе за респонзивне слике веб дизајна
Када радите са подацима великог обима, чак и најмања промена може имати драматичан утицај на перформансе.

Поврх тога, корпоративна структура такође може играти улогу. Рецимо да се ДБА тим налази на 10. спрату са свим својим базама података, док су програмери на 15. спрату или чак у некој другој згради у потпуно одвојеној структури извештавања - у овим условима је сигурно тешко несметано сарађивати.



У овом чланку бих желео да постигнем две ствари:



  1. Пружите програмерима неке технике подешавања перформанси СКЛ-а на страни програмера.
  2. Објасните како програмери и ДБА могу ефикасно да сарађују.

СКЛ подешавање перформанси (у кодној бази): Индекси

Ако сте потпуно нови у базама података и чак се питате „Шта је СКЛ подешавање перформанси ? ”, Требали бисте знати да је индексирање ефикасан начин подешавања ваше СКЛ базе података која се често занемарује током развоја. У основним терминима, ан индекс је структура података која побољшава брзину операција проналажења података на табели базе података пружајући брза случајна претраживања и ефикасан приступ уређеним записима. То значи да када направите индекс, редове можете да одаберете или сортирате брже него раније.

Индекси се такође користе за дефинисање примарног кључа или јединственог индекса који ће гарантовати да ниједан други ступац нема исте вредности. Индексирање база података је огромна занимљива тема којој се не могу правдати са овим кратким описом (али ево детаљнијег писања ).



Ако сте нови у индексима, саветујем вам да користите овај дијаграм за структурирање упита:

Овај дијаграм илуструје неколико савета за подешавање перформанси СКЛ-а које би сваки програмер требао знати.



У основи, циљ је индексирање главних колона за претраживање и редослед.

Имајте на уму да ако ваше табеле непрестано кују | | + + _ |, INSERT и UPDATE, будите опрезни приликом индексирања - могли бисте завршити смањење перформанси пошто све индексе треба модификовати након ових операција.



Даље, ДБА често испуштају своје СКЛ индексе пре него што изврше групно уметање више од милион редова у убрзати поступак уметања . Након уметања пакета, они поново креирају индексе. Запамтите, међутим, да ће испуштање индекса утицати на сваки упит покренут у тој табели; тако да се овај приступ препоручује само када се ради са једним, великим уметком.

СКЛ подешавање: планови извршења у СКЛ серверу

Иначе: алат за план извршења у СКЛ серверу може бити користан за креирање индекса.



Његова главна функција је графички приказати методе проналажења података које је изабрао СКЛ Сервер оптимизатор упита. Ако их никада пре нисте видели, има их детаљно упутство .

Да бисте преузели план извршења (у програму СКЛ Сервер Манагемент Студио), само кликните на „Укључи стварни план извршења“ (ЦТРЛ + М) пре покретања упита.



Након тога ће се појавити трећа картица под називом „План извршења“. Можда ћете видети откривени индекс који недостаје. Да бисте га креирали, само кликните десним тастером миша на план извршења и одаберите „Недостају детаљи индекса ...“. То је тако једноставно!

Овај снимак екрана приказује једну од техника подешавања перформанси за вашу СКЛ базу података.

( Кликните за зумирање )

СКЛ подешавање: Избегавајте петље кодирања

Замислите сценарио у којем 1000 упита редом копа вашу базу података. Нешто слично:

DELETE

Требао би избегавајте такве петље у вашем коду. На пример, могли бисмо трансформисати горњи исечак користећи јединствени for (int i = 0; i <1000; i++) { SqlCommand cmd = new SqlCommand('INSERT INTO TBL (A,B,C) VALUES...'); cmd.ExecuteNonQuery(); } или INSERT израз са више редова и вредности:

UPDATE

Обавезно унесите INSERT INTO TableName (A,B,C) VALUES (1,2,3),(4,5,6),(7,8,9) -- SQL SERVER 2008 INSERT INTO TableName (A,B,C) SELECT 1,2,3 UNION ALL SELECT 4,5,6 -- SQL SERVER 2005 UPDATE TableName SET A = CASE B WHEN 1 THEN 'NEW VALUE' WHEN 2 THEN 'NEW VALUE 2' WHEN 3 THEN 'NEW VALUE 3' END WHERE B in (1,2,3) клаузула избегава ажурирање сачуване вредности ако се подудара са постојећом вредношћу. Таква тривијална оптимизација може драматично повећати перформансе СКЛ упита ажурирањем само стотина редова уместо хиљада. На пример:

WHERE

СКЛ подешавање: Избегавајте повезане СКЛ подупитаје

ДО корелирани подупит је онај који користи вредности из надређеног упита. Ова врста СКЛ упита се обично покреће ред по ред , једном за сваки ред који враћа спољни упит, и тиме смањује перформансе СКЛ упита. Нови програмери СКЛ често бивају ухваћени у структурирању својих упита на овај начин - јер је то обично лак пут.

подешавање перформанси базе података и оптимизација упита

Ево примера корелираног подупита:

UPDATE TableName SET A = @VALUE WHERE B = 'YOUR CONDITION' AND A @VALUE -- VALIDATION

Конкретно, проблем је што се покреће унутрашњи упит (SELECT c.Name, c.City, (SELECT CompanyName FROM Company WHERE ID = c.CompanyID) AS CompanyName FROM Customer c ) сваки ред враћен спољним упитом (SELECT CompanyName…). Али зашто ићи преко SELECT c.Name… изнова и изнова за сваки ред који обрађује спољни упит?

Ефикаснија техника подешавања СКЛ перформанси била би рефакторирање корелираног подупита као спајања:

Company

У овом случају прелазимо преко SELECT c.Name, c.City, co.CompanyName FROM Customer c LEFT JOIN Company co ON c.CompanyID = co.CompanyID табелу само једном, на почетку, и ПРИДРУЖИТЕ се са Company сто. Од тада па надаље можемо ефикасније да бирамо вредности (Customer).

СКЛ подешавање: Изаберите штедљиво

Један од мојих омиљених савета за оптимизацију СКЛ-а је избегавање co.CompanyName! Уместо тога, требали бисте појединачно да уврстите одређене колоне које су вам потребне. Опет, ово звучи једноставно, али свугде видим ову грешку. Размотрите табелу са стотинама колона и милионима редова - ако вашој апликацији заиста треба само неколико колона, нема смисла да тражите све Подаци. То је огромно расипање ресурса. ( За више питања погледајте овде . )

На пример:

SELECT *

вс.

SELECT * FROM Employees

Ако су вам заиста потребне све колоне, изричито их наведите. Ово није толико правило, већ средство за спречавање будућих системских грешака и додатног подешавања перформанси СКЛ-а. На пример, ако користите SELECT FirstName, City, Country FROM Employees а изворна табела се променила додавањем нове колоне, могли бисте наићи на проблеме, чак и ако та колона није потребна одредишној табели, нпр .:

INSERT... SELECT...

Да бисте избегли ову врсту грешке из СКЛ Сервера, требало би да декларишете сваку колону појединачно:

INSERT INTO Employees SELECT * FROM OldEmployees Msg 213, Level 16, State 1, Line 1 Insert Error: Column name or number of supplied values does not match table definition.

Међутим, имајте на уму да постоје неке ситуације када употреба INSERT INTO Employees (FirstName, City, Country) SELECT Name, CityName, CountryName FROM OldEmployees може бити прикладно. На пример, са привременим табелама - што нас води до следеће теме.

СКЛ подешавање: мудра употреба привремених табела (#Темп)

Привремени столови обично повећавају сложеност упита. Ако ваш код можете написати на једноставан, једноставан начин, предлажем да избегавате привремене табеле.

Али ако имате сачувану процедуру са неком манипулацијом подацима, то не може да се обрађује једним упитом, привремене табеле можете користити као посреднике који ће вам помоћи да генеришете коначни резултат.

Када морате да се придружите великој табели и постоје услови на њој, можете повећати перформансе базе података преношењем података у привремену табелу, а затим удруживањем на то . Ваша привремена табела ће имати мање редова од оригиналне (велике) табеле, тако да ће се спајање завршити брже!

Одлука није увек једноставна, али овај пример ће вам дати осећај за ситуације у којима бисте можда желели да користите привремене табеле:

Замислите табелу купаца са милионима записа. Морате се придружити одређеном региону. То можете постићи коришћењем SELECT * изјава и затим спајање са привременом табелом:

како савладати Ц++
SELECT INTO

( Напомена: неки програмери СКЛ такође избегавају употребу SELECT * INTO #Temp FROM Customer WHERE RegionID = 5 SELECT r.RegionName, t.Name FROM Region r JOIN #Temp t ON t.RegionID = r.RegionID за креирање привремених табела, рекавши да ова наредба закључава базу података темпдб, онемогућавајући другим корисницима стварање привремених табела. Срећом, ово је поправљено у 7.0 и новијим верзијама .)

Као алтернативу привременим табелама, можете размотрити употребу подупита као табеле:

SELECT INTO

Али чекај! Постоји проблем са овим другим упитом. Као што је горе описано, у подупит би требало да уврстимо само потребне колоне (тј. Да не користимо SELECT r.RegionName, t.Name FROM Region r JOIN (SELECT * FROM Customer WHERE RegionID = 5) AS t ON t.RegionID = r.RegionID ). Узимајући то у обзир:

SELECT *

Сви ови СКЛ исечци вратиће исте податке. Али са привременим табелама могли бисмо, на пример, створити индекс у привременој табели како бисмо побољшали перформансе. Постоји добра дискусија овде о разликама између привремених табела и подупита.

јавасцрипт добије тренутно утц време

Коначно, када завршите са привременом табелом, избришите је да бисте очистили ресурсе темпдб, уместо да само чекате да се аутоматски избрише (као што ће бити када се веза са базом података прекине):

SELECT r.RegionName, t.Name FROM Region r JOIN (SELECT Name, RegionID FROM Customer WHERE RegionID = 5) AS t ON t.RegionID = r.RegionID

СКЛ подешавање: „Да ли постоји моја евиденција?“

Ова техника оптимизације СКЛ односи се на употребу DROP TABLE #temp . Ако желите да проверите да ли постоји запис, користите EXISTS() уместо EXISTS(). Док је COUNT() скенира целу табелу, бројећи све уносе који одговарају вашем стању, COUNT() изаћи ће чим види резултат који му је потребан. Ово ће вам дати боље перформансе и јаснији код .

EXISTS()

вс.

IF (SELECT COUNT(1) FROM EMPLOYEES WHERE FIRSTNAME LIKE '%JOHN%') > 0 PRINT 'YES'

Подешавање СКЛ перформанси помоћу СКЛ Сервера 2016

Као што су ДБА-и који раде са СКЛ Сервер 2016 вероватно свесни, верзија је означила важан помак у задате поставке и управљање компатибилношћу . Као главна верзија, наравно, долази са новим оптимизацијама упита, али контрола да ли се користе сада је поједностављена путем IF EXISTS(SELECT FIRSTNAME FROM EMPLOYEES WHERE FIRSTNAME LIKE '%JOHN%') PRINT 'YES' .

СКЛ подешавање перформанси (у Оффицеу)

Администратори СКЛ база података (ДБА) и програмери често се сукобљавају око проблема који се односе на податке и оне који се не односе на податке. Извучено из мог искуства, ево неколико савета (за обе стране) о томе како се снаћи и ефикасно сарађивати.

Подешавање перформанси СКЛ-а превазилази базу кода када ДБА и програмери морају ефикасно да сарађују.

Твеет

Оптимизација базе података за програмере:

  1. Ако ваша апликација изненада престане да ради, можда није проблем у бази података. На пример, можда имате мрежни проблем. Истражите мало пре него што оптужите ДБА!

  2. Чак и ако сте ниња СКЛ модел података, замолите ДБА да вам помогне са вашим релационим дијаграмом. Имају много тога да поделе и понуде.

  3. ДБА не воле брзе промене. То је природно: они морају да анализирају базу података у целини и испитају утицај свих промена из свих углова. Једноставна промена колоне може да спроведе недељу дана, али то је зато што би грешка могла да се оствари као огромни губици за компанију. Будите стрпљиви!

  4. Не тражите од СКЛ ДБА-а да врше промене података у производном окружењу. Ако желите приступ производној бази података, морате бити одговорни за све своје промене.

Оптимизација базе података за СКЛ Сервер ДБА:

  1. Ако не волите да вас људи питају о бази података, дајте им статусни панел у реалном времену. Програмери су увек сумњичави према статусу базе података, а такав панел може уштедети време и енергију.

  2. Помозите програмерима у окружењу за тестирање / осигурање квалитета. Олакшајте симулацију производног сервера једноставним тестовима на стварним подацима. Ово ће вам уштедети време како другима, тако и вама самима.

  3. Програмери проводе цео дан на системима са често мењаном пословном логиком. Покушајте да схватите да је овај свет флексибилнији и да будете у стању да прекршите нека правила у критичном тренутку.

  4. СКЛ базе података се развијају. Доћи ће дан када ћете морати да пребаците податке на нову верзију. Програмери рачунају на значајне нове функције са сваком новом верзијом. Уместо да одбијете да прихватите њихове промене, планирајте унапред и будите спремни за миграцију.

Повезан: Објашњени СКЛ индекси, Пт. 1

Разумевање основа

Шта је обрада упита у ДБМС-у?

Системи за управљање базама података, као што је СКЛ Сервер, морају превести СКЛ упите које им дате у стварне инструкције које морају да изврше за читање или промену података у бази података. Након обраде, механизам базе података такође покушава аутоматски да оптимизује упит тамо где је то могуће.

Шта је оптимизација упита у СКЛ Серверу?

Оптимизација упита је када програмер или механизам базе података промени упит на такав начин да СКЛ Сервер може ефикасније да врати исте резултате. Понекад је једноставно користити ЕКСИСТС () уместо ЦОУНТ (), али други пут упит треба преписати другачијим приступом.

Шта је подешавање перформанси у СКЛ серверу?

Подешавање перформанси укључује оптимизацију упита, СКЛ клијентску оптимизацију кода, управљање индексом базе података и, у другом смислу, бољу координацију између програмера и ДБА.

како пронаћи програмера софтвера

Чему служи индекс у СКЛ-у?

Индекс прати циљани подскуп података табеле, тако да се одабир и редослед може обавити много брже, а да сервер не мора да прегледа сваки последњи бит података за ту табелу.

Зашто је ЕКСИСТС () бржи од ЦОУНТ ()?

ЕКСИСТС () зауставља обраду чим пронађе одговарајући ред, док ЦОУНТ () мора да броји сваки ред, без обзира да ли вам је тај детаљ на крају потребан.

Напредни савети за ПоверПоинт презентације и хаковања

Финансијски Процеси

Напредни савети за ПоверПоинт презентације и хаковања
Продајете своје предузеће? Престаните да остављате новац на столу

Продајете своје предузеће? Престаните да остављате новац на столу

Раст Прихода

Популар Постс
Како створити бот за анализу расположења е-поште: Водич за НЛП.
Како створити бот за анализу расположења е-поште: Водич за НЛП.
Поуке из инвестиционе стратегије Варрена Буффетта и његове грешке
Поуке из инвестиционе стратегије Варрена Буффетта и његове грешке
Зашто отплата дељења не успева? Неки предложени лекови
Зашто отплата дељења не успева? Неки предложени лекови
Повећајте своју продуктивност помоћу Амазон Веб Сервицес
Повећајте своју продуктивност помоћу Амазон Веб Сервицес
Развој Андроид ТВ-а - Долазе велики екрани, припремите се!
Развој Андроид ТВ-а - Долазе велики екрани, припремите се!
 
Доступност на мрежи: зашто се стандарди В3Ц често игноришу
Доступност на мрежи: зашто се стандарди В3Ц често игноришу
Алати наредбеног ретка за програмере
Алати наредбеног ретка за програмере
Зен девРант-а
Зен девРант-а
Заступства и гаранција: Алат за спајања и преузимања о коме би сваки продавац требао знати
Заступства и гаранција: Алат за спајања и преузимања о коме би сваки продавац требао знати
Значај дизајна усмереног на човека у дизајну производа
Значај дизајна усмереног на човека у дизајну производа
Популар Постс
  • ц++ на тежи начин
  • шта ЦФО значи у пословању
  • која је разлика између ас цорп и ац цорп
  • разлика између ц-цорп и с-цорп
  • како написати добре јединичне тестове
  • најбоље праксе дизајна одредишне странице
Категорије
  • Агиле Талент
  • Финансијски Процеси
  • Дизајн Бренда
  • Трендови
  • © 2022 | Сва Права Задржана

    portaldacalheta.pt