Читайте данную работу прямо на сайте или скачайте

Скачайте в формате документа WORD


Скорость обработки запросов на SQL серверах

М

Н

СТЕРСВо ОСВ

Иа УКАпНИ

ИпВСЬИй Н

ВЕРС

ТТа

МЕН

а ТАРАС ШЕВЧЕНКА

Факультета кбернетики

Кафедр теоретично

ВИПУСКН КВАЛ

Ф

КАЦ

ЙН РОБОТА

БАКЛАВРА

Н темуа : Швидксть обробкиа запитв

н SQL-серверах

Виконавець:а студента 4а курсу

Дим Павло Костянтинович

Науковий кервник :а ассистента Коваль Ю.В.

Випускн квалфкацйн робот бакалавра

Рекомендован до захисту ва ДЕК

Протокола № 10, вда У2Фа травня 2 р.

Зав.кафедри проф. Белова Ю.А

м Ки

ЗМ

СТ


1.Вступ...2

2.Швидксть роботиа SQL сервера.5

2.1 Технологя DAOЕЕ.6

2.2 Технологя ODBCЕ..6

2.3а JSCRIPT..7

3. Результатиа тестування...17

Висновок..21

Списока використано

Частин 1 :а ВСТУП

у свт сучасниха нформацйниха технологй особливо видля

-ться всесвтня мереж Internet. Опорнима елементома ва цй мережа

а сервер база данних. Саме н сервера зберга

ться нформаця до яко

Ва мережаха використовуються так SQLЦсервер яка Oracle, Microsoftа SQL Server, Sybase, dbase, Informix, Progressа т нш. Яка приклада SQL - сервер взьмемо Microsoftа SQL Serverа 7.0.

Систем MSа SQL Server -а це багаторвнев систем обмну данними вда клúнт до сервера, дозволя

а створювати а пдтримувати бази данних.

Н вднуа вд базиа данниха орúнтованиха н велика компютери т мн-компютери, до серверно

Звязока системиа клúнт/сервера за компютерами-клúнтамиа забезпечу-

ться череза засобиа передача данниха а базово

Серверн СУБД MSа SQL Server 7.0а добавля

а до мережевиха компонента окрема елементи сервса, така яка OLE-DBа вдповда

а з звязока т провадження об

ктва база даниха ODBCа - вдкритий нтерфейса база даних. Ца компонентиа забезпечують тсний звязока необхдного програмного забезпечення.

SQL Server 7.0а ма

а багато нструментв, призначениха для розробки зовншнього нтерфейсу бази даних. Окрма мови SQLа для збергання, вибрки данниха можн викоритовувати додатки [приложения]а за графчнима нтерфейсом користувач GUI. Це дуже спрощу

а розробку база даних, таблиць звязква мжа ними. Зручно використовувати SQL Server разома за програмами для роботи ва Internet.

Центральнима компонентома системиа SQL Server

а реляцйн баз даниха т ?а структура. Ва реляцйнй база даниха нформаця представля

ться ва вигляда рядква т стовбцв. Рядки неа впорядкован, крма випадку, коли для таблица створю

ться кластерний ндекс. Сам структур операторва запитв, за допомогоюа якиха проходять виборк даниха за рядкв таблиц, не залежить вда того впорядкована рядки чиа н.

Частин 2а :а ШВИДК

Ть РОБОИа SQL SERVER 7.0

Ва процеса роззвитку SQL Serverа при розробца клúнтськиха додатква використовувалось декльк пдходв. Ядрома системиа завжди бува процессора обробки запитв, який працювава н сервер. Запитиа писались н мов SQLа вводились а опрацьовувались череза утлти типу Queryа Analyzer.

При написанна програмниха додатква для вза

модÿа з SQL Serverа частше з усе використовують :

1                DB-Library

2                ODBCа DAO

DB-Libraryа явля

а собою специфчний для SQL Serverа нтерфейса прикладниха програм. Вна

а менша зручний нж ODBC, для переносуа програмного додатку ва ншу сервернуа систему але за точки зору працездатноста вна реалзову

а самий швидкийа доступа до нформацÿ.

Цеа забезпечу

ться не тлькиа тим, що вна нада

а оптимзований нтерфейса API, але використову

а ва програмаха особисту мовуа системи SQL Server. ODBCа (яка а SQL-OLE )а надають такий жеа рвень сервсу алеа створюють додатковий рвень абстракцÿа мжа додаткома а т процессором запитв SQLа Server.

Ва DB-Libа не пдтриму

ться звязока таблиць або автоматичного оновлення значень. Цеа можн розглядати яка позитива оскльки гаранту

ться повний контроль нада вза

модúю програмного додаткуа за серверома а оптимзацúю звязкв. Додатково програмсту дода

ться повнийа контроль нада виявденняма а обробкою помилок, повязаниха за транзакцями.

2.1а ТЕХНОЛОГ

Я DAO

(Dataа Accessа Object - об

ктиа доступу до данних)а приззначен для викоритання об

ктв, методв, авластивотей, значно полегшшують роботу програмного додатку за базоюа даних. Для обмнуа нформацúю за SQL серверома ва об

ктаха DAOа викоритову-ються рвна дотупу Jet ODBC, одн вони творюють ще одина рвень абстракцÿа мжа додаткамиа а викликами функцйа ODBC, яка використовуються приа обробца запитв.

Технологя DAOа для роботи за базами даних, таблицями, видами передбача

а викоритання коллекцй об

ктв. Наприклада для створення ново

При робота за базою даниха можн використати стандартний пдхда для доступу до майже будь-якого сховищ даних, що пдтрииму

ться засобоми ODBC.

Алеа треб вдмтити, що технологя DAOа поступово витсня

ться бльша прогресивною технологúю ADO(ActiveXа Dataа Object - об

кти данх ActiveX ).

2.2 ТЕХНОЛОГ

Я аODBC

За метоюа можливого встановлення звязкуа з рзними СУДа фрмою Microsoftа бул розроблен технологя ODBC. Вон забезпечу

а створення додаткового рвня абстракцÿа мжа програмнима додаткома а СУБД. Даний рвень дозволя

а створити однуа команду Selectа використовувати ?а для виборки даниха за будь-якиха пдтриму

миха типва база даних, враховуючи та випадки, коли СУДа взагала не пдтриму

а мову SQL.

Службиа ODBCа являють собою окремийа рвень доступу до файлва база даних.а ODBCа бере н себеа вдповдальнстьз отримання вда до-датква запитва н вибрку нформацÿа а переведення

Головнима недолком ODBC

а необхднсть ва трансляцÿа запитв. Проведення ц㺿а додатково

а2.3а JSCRIPT

Тепера перейдемо до процесв, що повязана за вимрюванняма швидкоста системиа SQL Server 7.0. у даннй робота прпону

ться написання програмного додатку н встро

нномуа shell аOSа Windowsа NTа -а Javaа Script. Сама програмний додатока це програм написан для нтерпритуюч мова. Файла за розширенням. jsа буде виконавчима для OSа Windowsа NT. Спочаткуа напишемо Scriptа для створення базиа даниха :

// ADO Flags

ar adLockOptimistic = 3;

ar adOpenStatic = 3;

arа SQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt"

//varа SQL_DataBase = "DSN=OTStt;UID=;PWD="

ar oConn;

ar oRs;

function db_Connect(){

// Create ADO Connection Object. Use IISSDK OBDC Souce with

// default sa account and no password

oConn = new ActiveXObject("ADODB.Connection");

oConn.Open(SQL_DataBase);

oConn.CommandTimeout=600;

}

function db_Record(SQL){

var oRs;

// Create ADO Recordset Component, and associate it with ADO

connection

oRs = new ActiveXObject("ADODB.Recordset");

oRs.ActiveConnection = oConn;

// Get empty recordset

oRs.Source = SQL;

oRs.CursorType = adOpenStatic; // use a cursor

other than Forward Only

oRs.LockType = adLockOptimistic; // use a locktype

permitting insertions

oRs.Open();

return oRs;

}

function db_Close(){

oConn.Close();

}

function db_Requery(Rec,SQL){

Rec.Close();

Rec.Source = SQL;

Rec.Open();

}

db_Connect();

try {

oRs=db_Record("CREATE TABLE dbo.DBTEST ( String char (30) NULL, Number int NOT NULL DEFAULT (0), Random int NOT NULL DEFAULT (0))");

} catch (e) {

}

oRs=db_Record("SELECT * FROM DBTEST WHERE 0=1");

for(i=0;i<1;i++){

oRs.Addnew();

oRs("String").value="User"+i;

oRs("Number").value=i;

oRs("Random").value=Math.round(100*Math.random());

oRs.Update();

if(i%1==0)

WScript.echo("Now in base present "+i+" records");

}

WScript.echo("Completed");

Баз даниха буде матиа вид :

String

Number

Random

User1

1

34

User2

2

12

User3

3

75

....

....

....

у наведеномуа Scriptа функця Connectа вдповда

а з регстрацю ва SQL Serverа а творення базиа даниха DBTest.

DSN - мя звязку, визнача

ться приа утворенна джерел даниха ODBC.

UID - дентифкатора користувача, використову

ться приа регстрацÿа н сервер, у SQL Server дентифкатора користувач завжди ма

а починатись за У sа Ф.

PWD - або У password Фа кодовеа слово доступу, необхднийа для регстрацÿа н сервер. Ва даномуа випадку не використову

мо.

Функця Recordа проводить записа у вса рядки бази даниха DBTest створена значення, а стовбчика Random - створена генераторома випадковиха чисела значення вда 0а до 99.

Кльксть рядква у таблица будеа 10, створення займа

а 3,5а хвилин. Стовбчик Numberа буде ключем.

Напишемо ще один Script, для тестування швидкоста роботиа SQL Serverа. Щоба визначети час вдповда н запита яка мог точнше будемо посилатиа н сервера неа одина запит, декльк десятква однаковиха запитв, обрахувавши середнй часа вдповда отрима

мо точний часа обробки запитуа а знаходження серверома результуючо

результатиа роботи будуть неа точн, оскльки приа звичайному запит хешування таблица не робиться.

// ADO Flags

ar adLockOptimistic = 3;

ar adOpenStatic = 3;

arа SQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt"

//varа SQL_DataBase = "DSN=OTStt;UID=;PWD="

ar oConn;

ar oRs;

function db_Connect(){

// Create ADO Connection Object. Use IISSDK OBDC Souce with

// default sa account and no password

oConn = new ActiveXObject("ADODB.Connection");

oConn.Open(SQL_DataBase);

oConn.CommandTimeout=600;

}

function db_Record(SQL){

var oRs;

// Create ADO Recordset Component, and associate it with ADO connection

oRs = new ActiveXObject("ADODB.Recordset");

oRs.ActiveConnection = oConn;

// Get empty recordset

oRs.Source = SQL;

oRs.CursorType = adOpenStatic; // use a cursor other than Forward Only

oRs.LockType = adLockOptimistic; // use a locktype permitting insertions

oRs.Open();

return oRs;

}

function db_Close(){

oConn.Close();

}

function db_Requery(Rec,SQL){

Rec.Close();

Rec.Source = SQL;

Rec.Open();

}

function Test(TestNumber, Query, CountTests){

Max=0;

Min=1;

Delta=0;

Ave=0;

WScript.echo("Query #"+TestNumber);

for(i=0;i<CountTests;i++){

StartTime=new Date();

db_Requery(oRs,Query);

EndTime=new Date();

Delta=(EndTime-StartTime);

WScript.echo("а Probe #"+i+" Result="+Delta+" ms");

Ave=(Ave*i+Delta)/(i+1);

}

WScript.echo(" Result="+Ave+" ms");

}

db_Connect();

oRs=db_Record("SELECT *а FROM DBTEST WHERE 1=0");

Test(1, " SELECT * FROM DBTEST ", 50 );

Test(2, " SELECTа * FROMа DBTESTа ORDERа BYа String",50);

Test( 3," SELECT *а FROM DBTEST ORDERа BY Number ",50);

Test (4,"SELECT Sum(Number) FROM DBTEST GROUP BYа String",50);

Test(5, " SELECT Sum(Number) FROMа DBTEST GROUP BY

Random",50);

Test( 6, " SELECTа * FROM DBTESTа WHERE Number = ", 50);

Test(7," SELECT *а FROMа DBTEST WHEREа String = 'User'",50);

Test(8,"SELECT * FROM DBTEST WHERE Number in (SELECT

Number FROM DBTEST ) ", 50 );

Test(9 ,"SELECT * FROM DBTEST WHERE Number in (SELECT

Number FROM DBTESTа WHEREа String < ' User5 ' ) ",50);

Test(10, " SELECT * FROM DBTEST WHEREа Numberа inа (SELECT

Number FROM DBTEST WHERE String='User5')", 50);

Test(11, " SELECT * FROM DBTESTа WHERE Number in (SELECT

Number FROM DBTEST WHERE String > ' User1 ' ) ", 50);

Test(12, "INSERT INTO DBTEST (String,Number)

VALUES('User30',30) ", 50 );

Test(13, "DELETE FROM DBTEST (String,Number)

VALUES('User30',30) ", 50);

Test(14," DELETE FROM DBTEST ", 1);

db_Close()

Головн функця Testа а цикла 50а разва посила

а запита н сервер, обрахову

а рзницю мжа початкома обробки запитуа а часома закнчення обробки :

StartTime=new Date();

ла обробк запитуа

EndTime=new Date();

Delta=(EndTimeа -а StartTime);

у останньому scriptа ма

мо 14а тества для тестування рзниха можли-востейа SQL Server. Розглянемо

Тестиа 12а 13а характеризують швидксть вставки а вилучення елементва у база даних.

Теста 14а знищу

а сюа таблицю.

Запитиа н вибрку нформацÿа :

Теста 1:" SELECT * FROM DBTEST " -а видлити вса елементи ;

Теста 2: " SELECTа * FROMа DBTESTа ORDERа BYа String"а -вдсортувати са елементи з значенняма у стовбчику УStringФ;

Теста 3:" SELECT *а FROM DBTEST ORDERа BYа Number"- вдсортува-ти уса елементи з значенняма у стовбчикуа У Number Ф;

Теста 4:"SELECT Sum(Number) FROM DBTEST GROUP BYа String"

- скласти са елементи стовбчик У Number Ф з значенняма у стовбчи-куа УStringФ;

Теста 5:" SELECT Sum(Number) FROMа DBTEST GROUP BY

Random" - скласти са елементи стовбчик У Number Ф з значенняма у стовбчикуа У Random Ф;

Теста 6:" SELECTа * FROM DBTESTа WHERE Number = " - визначити са елементи, а яких значення у стовбчикуа У Number Ф = ;

Теста 7:" SELECT *а FROMа DBTEST WHEREа String = 'User'" - визначити са елементи, а якиха значення у стовбчику УString У = 'User' ;

Теста 8 : "SELECT * FROM DBTEST WHERE Number in (SELECT Number FROM DBTEST ) "а - визначитиа уса елементи за множини чисел ;

Теста 9 :"SELECT * FROM DBTEST WHERE Number in (SELECT

Number FROM DBTESTа WHEREа String < ' User5 ' ) " - визначити са елементиа за множини елементв, а якиха значення у стовбчику УString У < ' User5 ';

Теста 10 : " SELECT * FROM DBTEST WHEREа Numberа inа (SELECTа Number FROM DBTEST WHERE String='User5')" - визначитиа уса елементи за множини елементв, у якиха значення у стовбчику УString У = ' User5';

Теста 11 : " SELECT * FROM DBTESTа WHERE Number in (SELECT Number FROM DBTEST WHERE String > ' User1 ' ) "- визначити са елементи за множиниа елементв, у якиха значення у стовбчику УString У > ' User1' ;

Частина 3 : РЕЗУЛЬТАИа ТЕСТУВАННЯ


Для наведення прикладу нверсальноста приа використанна написан-ного scriptа приа вимрюванна швидкодÿ, вимря

мо швидксть обробки запитва у система SQL Serverа 7.0а т Microsoftа Access 97.

Щоб scriptа сприймався системою Accessа беза суперечень треб змнитиа параметри дентифкацÿ :

//varа SQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt"

varа SQL_DataBase = "DSN=OTStt;UID=;PWD="

Отримана результати приведемо у таблица :

Теста №

SQL Serverа 7.0

Access 97

1

2,673

1,81

2

7,781

5,603

3

7,356

5,211

4

8,239

7,54

5

0,903

0,494

6

0,345

0,231

7

0,390

0,287

8

11,207

7,11

9

3,843

2,53

10

0,655

0,507

11

11,469

9,816

12

0,3

0,285

13

0,31

0,22

14

55,62

34,324

Яка видно за результатва проведенного вимрювання запити н локальнй база даниха Access опрацьовуються значно швидшеа нжа н сервер.

Аналзуючи запитиа 2а 3, 4а 5, 6а 7а бачимо, що обробк елементва рзниха типва а однаковиха запитаха ма

а рзний час.

Така наприклад сортуватиа усха елементва з значенняма у стовбчикуа УStringФа опрацьову

ться повльнше нж а стовбчику " Number"-а причин а розмру елементва циха типв.

Тежа самеа при обробца запитв 4а 5а при сумуванна елементва стовбчик " Number" з елементамиа стовбчикв У String Фа а Ф RandomФ.

Стовбчик УString Ф зберга

а значення типу Stringа стовбчика ФRandomФ

зберга

а значення типу Integer, елементи типва мають рзний розмра а обробляються за рзною швидкстю.

Розглядаючиа швидксть обробки множина елментва зазначимо, що чии бльше елементва обробля

а сервера у база даниха тима бльше часуа н це йде. Така наприклада запита 10а н пошука у база даниха елемент типу Stringа - 'User5'а ззайма

а набагато менше часу нжа пошук елементв, що менше 'User5'. Таких елементва приблизно 50 тисяча

Запитиа 12,13а визначають часа занесення до базиа нового рядк а вилучення рядк за бази даних.

Проводячиа наведена дослдження з роботою сервер миа отриму

мо повну характеристику його роботи.

Використа

мо наведена вище програмна додатки проведемо вимри н ншиха SQL-серверах. Порвня

мо швидкоста роботиа SQL Serverа 7.0а Oracle 8а :

Теста №

SQL Serverа 7.0

Oracle 8

1

2,673

2,71

2

7,781

8,06

3

7,356

8,09

4

8,239

8,75

5

0,903

1,041

6

0,345

0,4

7

0,390

0,432

8

11,207

11,917

9

3,843

4,05

10

0,655

0,78

11

11,469

12,021

12

0,3

0,295

13

0,31

0,291

14

55,62

43,134

Яка видно за результатв SQL Serverа 7.0а працю

а швидшеа за аOracle 8а при обробца виброк, приа вставца вилученна елементва у Oracle краша результати. Це можн пояснитиа рзною будовою ядера обробки запитв.

Проведемо такжа замри для SQL сервер Informix.

Теста №

SQL Serverа 7.0

Informix

1

2,673

2,11

2

7,781

6,932

3

7,356

7,138

4

8,239

7,934

5

0,903

0,856

6

0,345

0,456

7

0,390

0,471

8

11,207

13,04

9

3,843

4,41

10

0,655

0,748

11

11,469

12,814

12

0,3

0,315

13

0,31

0,31

14

55,62

51,48

По результама видно, що SQL Serverа 7.0а працю

а повльнше за Informixа при обробца простиха запитв, приа пошуку порвнянна елементв працю

швидше. Н запитаха по вставца а вилученна елементва у Informix SQL Server 7.0а майже однаков результати.

Такима чинома ми досяглиа мети данно

ВИСНОВОК

В результата проведенно

Були написана два програми, що дають змогу вимрюватиа швид-ксть обробки запитва багаторвневою серверною системою Microsoftа SQLа Serverа 7.0а тима самима дають можливсть дослджувати ефективнсть настройки параметрва системи, дають змогу оцнитиа оптимальнсть побудови базиа даних, оптимальнсть використання ндексв, правил, обмежень, ефективнсть роботи за транзакцями.

Були розглянута сильна слабка боки технологй роботиа за програмними додаткамиа -а DB-Libraryа т ODBC за DAO.

Яка приклада роботи програмниха додатква отримана дана про швидкодю система база даних SQL Serverа 7.0а т Microsoftа Access 97.

Порвняна результати застосування програмниха додатква у системах SQL-серверва такиха яка аOracleа т Informixа за швидкстюа роботи Microsoftа SQL Serverа 7.0.

Використовуючи написана script-иа програмсти розробникиа система база даниха типу клúнт/сервера можуть визначати характеристики створениха ними система за цллю аналзу а удосконалення.

СПИСКа ВИКОРИСТАОпа Л

ТЕРАТУРИ :

1.            Використання Microsoftа SQL Server 7.Фа Стефана Внкоп

вид. Москва 1 р.

2.            У Teach Yourself Oracle 8 In 21 DaysФа Caryа N. Prague

3.            У Секреты Accessа 9Фа ильяма Амо изд.Диалектик 1997р.

4.            У Технологя JavaФа Джо Вебера вид. УBHVФа 1996 р.

5.            Журнала УPC WorldФ № 3,7,8а з 97 р., № 1,9а з 98 р.

6.            а.techrepublic.com