Бързодействие в базите данни и Нормални форми

Здравейте колеги,

споделям с вас две много добри и полезни лекции за MSSQL от блога на Ники Костов.

https://www.youtube.com/watch?v=6_32gptz27U - Бързодействие в базите данни

https://www.youtube.com/watch?v=y8zG6yY29gk - Нормалните форми обяснени една по една с примери

 

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

 

    Бързодействие в MSSQL DB

  1. Повече RAM;

  2. CPU с повече ядра за да са бързи паралелните заявки;

  3. Table partitioning - физическо разпръскване на данните на отделни HD за да се работи по-бързо с тях. 

  4. Оптимизация на кеширането: десен бутон върху сървъра -> Properties -> Advanced -> Optimize for Ad hoc Workloads да е TRUE; Това означава, че при единична заявка няма да се използва кеширане, а чак на третия път при изпълнение на заявката;

  5. Настройка на паметта:  десен бутон върху сървъра ->Properties -> Memory , като при 8000 RAM 6000 е оптималното да използва сървъра (това го прави администратор);

  6. Foreign Key  да го правим на Index, че да можем да се възползваме от Merge Join (виж си тетрадката), но ако не го направим си остава Hash Match;Добра практика е да слагаме индекси при бази над 1000 000 записи;

  7. Оразмеряване на DB още при самото и създаване, ако вече знаем колко ще бъде размера й: десен бутон върху базата -> Properties -> Files -> Autogrowth и Initial Size;  By Default Initial Size e 8 MB, a Autogrowth е 64MB;  Ако ще създаваме много голяма база данни и оставим by default стойностите това означава, че ще имаме много силна фрагментация на базата (тя ще бъде разпръсната на много места по HD), което автоматично ще доведе до забавяне на заявките. Ако примерно знаем, че DB ще бъде 10GB, то можем да зададем Initial Size - 10GB и Autogrowth 1GB;

  8. Fill Factor - добре е да го настройваме за всеки индекс и да е 75-80%, като това означава, че ще имаме около 20% свободно място на всеки Node в B-дървото, което е допълнително място за Insert, Update, Delete. Това ще ни предпази от  допълнителни сплитвания на таблицата на още други таблици;

  9. Внимавай с конвертиранията в DB, защото са бавни. Ако търсим нещо по индекс, който е int, а ние търсим с varchar, то DB автоматично ще ни направи конвертиране, което ще ни забави търсенето;

  10. Внимавай как добавяш голямо количество данни в таблица, която вече има индекси. Първо изтриваш съществуващите индекси, инсъртваш новите данни, изчистваш кеша и добавяш отново индексите. Това трябва да се прави за да имаме винаги балансирано B-дърво;

  11. Когато се налага използвай създаването на кешираща таблица (резултата от SELECT директно се инсъртва в кеширащaта     таблица). Юзъра вместо да бърка винаги в DB ще му се дават данните от кеширащата таблица.

 

Поздрави!