Loading...
milen8204 avatar milen8204 296 Точки

[Homework] Databases - Performance

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

Оказа се (поне за мен), че базите данни не са толковоа скучни колкото си мислех. Също така на пръв поглед скучното домашно за перформанс се оказа доста интересно ако се "заиграеш".

Наблъскването на 10000000 записа е напръв поглед проста задача и може да го решиш със следния код:

CREATE DATABASE [Test] GO
USE Test
CREATE TABLE DateAndTex
(
    CurrentTime DATETIME NULL,
    TextInput NVARCHAR(MAX) NULL
)
GO 
INSERT INTO DateAndTex
VALUES(GETDATE(), 'ала бала');
GO 10000000

Но това отнема на моята щайга много време не изтърпях да го изчакам и да видя колко точно, ако се замислим как да подобрим перформанса ще се сетим за това, че дефоутната база е голяма 3 мб и се разшерява с 1мб. И с помоща на Google ще добавим реда: ALTER DATABASE Test MODIFY FILE
( NAME = N'Test' , SIZE = 1GB , MAXSIZE = UNLIMITED, FILEGROWTH = 100MB ) GO

До тук добре съборихме малко време :). Като помислих още малко... абе WHILE цикъла няма ли да работи по - бързо от колкото GO (н пъти). Дай да пробваме... Оказа се, че GO 10000 пъти на моята машина пълни таблицата за 7 секунди..., а като си направя while 10000 заедно с декларирането на брояча и при изчистен кеш ми ги тъпче за 4 секунди. Така че най - вероятно работи по - бързо с WHILE отколкото с GO.

Някой сеща ли се за други оптимизации?

 

Тагове:
5
Databases Basics 22/02/2015 13:43:54
XmUrF avatar XmUrF 363 Точки

С вкарването на всичко в една транзакция, операцията по записването на 10 милиона реда се оптимизира в пъти. Значи по дефолт както си е всяка операция да е транзакция, за 5мин ми беше вкарало 3 милиона реда. Като го направих всичко в една транзакция, за малко над 3 минути беше готово всичко.

Недостатъкът е, че транзакшън лога расте като луд при тоя случай :).

 

П.П.

Само при мен ли няма разлика между кешираното търсене и такова без кеш? Все за едно  и също време стават.

1
23/02/2015 15:55:24
g.stoyanov avatar g.stoyanov 776 Точки

След индексирането по дата и при мен е така :)

1
XmUrF avatar XmUrF 363 Точки

Да ти кажа при мен и преди, и след индексиране все тая. Даже на втора задача където се тества точно разликата с и без индекс... при мен не успях да намеря такава. Форсвам некеширано търсене, гледам execution plan-овете, виждам, че са различни, в единия случай ползва index Scan, на другото Index Seek и пак.... Пусках го бая пъти и почти винаги беше 1:1 като време, имаше примерно едно 20-на процента където да се забави с 2-3сек най-много търсенето без индекс, ама при 10милиона записа  и търсене от около 30-на секунди, 2секунди са си в рамките на статистическата грешка.

0
g.stoyanov avatar g.stoyanov 776 Точки

Селектирай само датата без текст колоната  ;)

0
XmUrF avatar XmUrF 363 Точки

Благодаря ти, че се опитваш да ми помогнеш в намирането на разлика, ама и това го пробвах :).

В началото търсех дата и текст, после смених само на дата, а после си изтрих и колоната Id, че и такава имах. Като търсех по дата и виждах в плана, че ползва clustered index scan по PK на Id(което би следвало да е нормално всъщност, нали така?), и затова я затрих и тая колона. Нямаше разлика.

Не знам, сигурно греша някъде, но не успях да разбера къде. Освен разликата при мен наистина да е 2-3сек, но ми се струва нелогично това.

0
25/02/2015 14:33:03
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.