Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Брент Озар обяснява вътрешната и външната фрагментация на SQL Server

Според Microsoft SQL Master, Брент Озар, той е взел някои ужасни решения за настройка на производителността на базата данни през цялата си кариера. За наш късмет можем да се възползваме от грешките му и не е нужно да разбираме всичко сами. Той сподели своята трудно спечелена мъдрост безплатно по време на поредицата за уеб предавания на Quest’s Database Training Days.

В една от неговите сесии научихме „Защо дефрагментирането на вашите индекси не помага“. Всъщност това може да влоши производителността на вашата база данни и Брент ни обясни защо. По пътя той подчерта важността да знаете какво измервате, когато става въпрос за оптимизиране на производителността на SQL Server.

Вътрешна спрямо външна фрагментация

Брент ни даде бърз урок за начина, по който SQL Server съхранява данни в 8 KB „страници“. В нов или възстановен индекс всички страници са пълни и се съхраняват в ред. Но когато се добавят повече данни, страниците се разделят:не всички страници са пълни и се появяват извън ред. Това е жизненоважната разлика между вътрешната и външната фрагментация:

  • Външна фрагментация – отнася се до неизправност на страници
  • Вътрешна фрагментация – отнася се до празното пространство на страница

Фокусиране по-малко на разделяне на страници

Много специалисти в базата данни се фокусират върху разделянето на страници като мярка за фрагментация на базата данни, но Брент обясни, че това число е безсмислено, тъй като разделянето на страници възниква както при добавяне на нов ред към празна таблица, така и при добавяне на нова страница. Така че в крайна сметка не е полезно.

Как външната фрагментация може да влоши нещата

В тази сесия Брент заяви, че външното фрагментиране не е полезна мярка за производителността на базата данни, тъй като редът на страниците не оказва голямо влияние върху скоростта на задачите за поддръжка, изпълнение на заявки в RAM или четене на данни от диск. Така че професионалистите в базата данни, които се опитват да коригират външната фрагментация чрез реорганизиране и повторно изграждане на индекси, всъщност влошават производителността чрез надуване на архивиране и изразходване на повече време за поддръжка.

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

Наблюдение на времето за изчакване

Какво трябва да направите вместо това? Брент съветва да зададете коефициента на запълване по подразбиране от 100% (или поне 80% или повече) и след това да възстановите индексите, за да ги опаковате отново. След това се съсредоточете върху наблюдението на правилния номер за настройка на производителността – време за изчакване. Един от най-добрите начини да видите различни аспекти на времето за изчакване в екземпляри на вашата база данни е като използвате инструмент за наблюдение на производителността за да определите точно къде процесите затъват.

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

Можете също да получите достъп до повече експертни съвети относно производителността на базата данни чрез Quest’s Database Training Days.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL заявка за получаване на обобщен резултат в разделители на запетая заедно с група по колона в SQL Server

  2. 6 начина за проверка на размера на база данни в SQL Server с помощта на T-SQL

  3. TSQL:Как да конвертирам местно време в UTC? (SQL Server 2008)

  4. Какво е @@SERVICENAME в SQL Server?

  5. Конфигурирайте SQL Server винаги ВКЛЮЧЕНИ Групи за наличност между две синхронни реплики. Част 2