Разделы | Программирование, Базы данных |
Тип | |
Формат | Microsoft Word |
Язык | Украинский |
Загрузить архив: | |
Файл: 014-0016.zip (14kb [zip], Скачиваний: 52) скачать |
МІНІСТЕРСТВООСВІТИ УКРАЇНИ
КИЇВСЬКИЙУНІВЕРСІТЕТ ІМЕНІТАРАСАШЕВЧЕНКА
Факультеткібернетики
Кафедратеоретичної кібернетики
ВИПУСКНАКВАЛІФІКАЦІЙНАРОБОТА
БАКЛАВРА
Натему : Швидкістьобробки запитів
наSQL-серверах
Виконавець:студент4 курсу
ДимаПавлоКостянтинович
Науковийкерівник :ассистент Коваль Ю.В.
Випускна кваліфікаційнароботабакалавра
Рекомендована дозахистувДЕК
Протокол№ 10, від“25”травня 2000 р.
Зав.кафедри проф. БеловЮ.А
м Київ - 2000
ЗМІСТ
1.Вступ………..………………………………………………………….2
2.Швидкістьроботи SQLсервера…………………………………….5
2.1 Технологія DAO…….………………………………………………6
2.2 ТехнологіяODBC…..………………………………………………6
2.3JSCRIPT……………………………………………………………..7
3. Результати тестування..…………………………………………….17
Висновок………………………………………………………………..21
Списоквикористаної літератури…………………………………….22
Частина1 : ВСТУП
Усвіті сучасних інформаційнихтехнологійособливо виділяє-тьсявсесвітнямережа Internet. Опорнимелементом вціймережі єсерверабаз данних.Самена серверізберігаєтьсяінформація доякоїможуть отриматидоступкористувачі. Прироботікористувача з базоюданнихвInternet,вінпосилає запитдо базиданнихю цейзапитсформовано заправиламимовиSQL (StructuredQueryLanguage) – моваструктурованихзапитів.
Вмережах використовуютьсятакі SQL–сервера якOracle,MicrosoftSQLServer,Sybase,dbase, Informix,Progressтаінші. ЯкприкладSQL – серверавізьмемо MicrosoftSQLServer7.0 .
СистемаMS SQLServer - цебагаторівневасистема обмінуданнимивід клієнтадосервера, дозволяєстворюватиі підтримуватибазиданних.
Навідіну від бази даннихорієнтованихна великікомп”ютерита міні-комп”ютери,досерверної базиданних користувачіотримуютьдоступ зісвоїхкомп”ютерів, анез допомогоютерміналів.При цьомумеханізмироботи SQL-серверадопомагаєрозв”язувати проблеми,щовиникають урезультатізвернень добазиданних багатьохкомп”ютерів,кожен зякихможе незалежнозвертатисьдо різнихчастин базиданних, щозберігаєтьсяна сервері.
Зв”язоксистеми клієнт/серверз комп”ютерами-клієнтами забезпечу-єтьсячереззасоби передачіданнихі базовоїопераційноїсистеми. Дляцьогосистема клієнт/серверMSSQLServer7.0використовує вбудованікомпонентиОСWindowsNT.
СервернаСУБД MSSQLServer 7.0добавляє домережевихкомпонент окреміелементисервіса, такіякOLE-DB відповідаєзазв”язок таупровадженняоб”єктів базданихіODBC- відкритийінтерфейсбаз даних.Цікомпоненти забезпечуютьтіснийзв”язок необхідногопрограмногозабезпечення.
SQLServer 7.0має багатоінструментів,призначених длярозробкизовнішнього інтерфейсубазиданих. Окрім мовиSQLдля зберігання,вибіркиданних можнавикоритовуватидодатки [приложения]з графічнимінтерфейсом користувача GUI. Цедужеспрощує розробкубазданих, таблицьізв”язків міжними.Зручно використовувати SQLServer разом зпрограмамидля роботивInternet.
Центральнимкомпонентомсистеми SQLServer єреляційнабаза данихтаїї структура. Вреляційнійбазі данихінформаціяпредставляєтьсяв виглядірядківта стовбців.Рядкине впорядковані,крімвипадку, колидлятаблиці створюєтьсякластернийіндекс. Самаструктураоператорів запитів,здопомогою якихпроходятьвиборка данихзрядків таблиці, незалежить відтого впорядкованірядки чи ні.
Частина2 :ШВИДКІСТЬРОБОТИ SQLSERVER 7.0
Впроцесі роззвитку SQLServer прирозробціклієнтських додатківвикористовувалосьдекілька підходів.Ядромсистеми завждибувпроцессор обробкизапитів, якийпрацював насервері.Запити писалисьнамові SQLвводились іопрацьовувалисьчерез утілітитипуQuery Analyzer.
Принаписанні програмнихдодатківдля взаємодіїз SQLServerчастішеза усевикористовують :
1 DB-Library
2 ODBCіDAO
DB-Libraryявляє собоюспецифічнийдля SQLServerінтерфейсприкладних програм .Вінє меншзручнийніж ODBC, дляпереносу програмногододаткувіншусерверну системуалез точкизорупрацездатностівін реалізовуєсамийшвидкий доступдоінформації.
Це забезпечуєтьсянетільки тим,щовін надаєоптимізованийінтерфейс API, алевикористовуєв програмахособистумову системиSQLServer. ODBC(як іSQL-OLE ) надаютьтакийже рівеньсервісуале створюютьдодатковийрівень абстракціїміждодатком ітапроцессором запитів SQL Server .
ВDB-Libнепідтримується зв”язок таблицьабоавтоматичного оновленнязначень.Це можнарозглядатияк позитивоскількигарантується повнийконтрольнад взаємодієюпрограмногододатку зсерверомі оптимізацієюзв”язків.Додатково програмістудодаєтьсяповний контрольнадвиявденням іобробкоюпомилок, пов”язанихзтранзакціями.
2.1 ТЕХНОЛОГІЯ DAO
(DataAccessObject – об”єкти доступудоданних)приззначенадлявикоритання об”єктів,методів, властивотей,значно полегшшуютьроботупрограмного додаткузбазою даних.Дляобміну інформацієюзSQLсерверомв об”єктахDAOвикоритову-ютьсярівні дотупуJet і ODBC, однавониутворюють щеодинрівень абстракціїміждодатками івикликамифункцій ODBC, яківикористовуютьсяпри обробцізапитів.
ТехнологіяDAO дляроботиз базамиданих,таблицями, видамипередбачаєвикоритання коллекційоб”єктів.Наприклад дляствореннянової таблицілегшевикликати методAddвідповідногооб”єкта, міжвикористовуватистандартний підхідтехнології ODBC.
Прироботіз базоюданихможна використатистандартнийпідхід длядоступудомайжебудь-якого сховищаданих,що підтриимуєтьсязасобоми ODBC.
Але требавідмітити,що технологіяDAO поступововитісняєтьсябільш прогресивноютехнологієюADO(ActiveX DataObject – об”єктиданх ActiveX) .
Зметою можливоговстановленнязв”язку з різнимиСУБД фірмоюMicrosoftбуларозроблена технологіяODBC .Вона забезпечуєствореннядодаткового рівняабстракціїміж програмнимдодаткомі СУБД.Данийрівень дозволяєстворитиодну командуSelectівикористовуватиїї длявиборкиданих збудь-якихпідтримуємих типівбазданих, враховуючитівипадки, колиСУБДвзагалі непідтримуємовуSQL.
Служби ODBC являютьсобоюокремий рівеньдоступудо файлівбазданих. ODBC беренасебе відповідальністьзаотриманнявід до-датківзапитівна вибіркуінформаціїі переведенняїхна мову,щовикористовує ядробазаданих, дляобробкизапиту. Гарнимприкладомвикористання ODBCтехнологіїє СУБДAccessфірмиMicrosoft.Головнарізниця між ODBC іBD-Lib полягаєутому, що ODBC вимагаєпобудовиі передачійомулише стандартнихSQL команд,аBD-Lib вимагаєособливогосинтаксису припобудовіу буферікоманд,що напрравляютьсябезпосередньоу сервернесередовище.
Головним недоліком ODBC є необхідністьвтрансляції запитів.Проведенняцієї додатковоїроботивідповідно відображаєтьсянашвидкості доступудоданих. Прироботі з ODBC можнаотриматисуттєвий виграшушвидкості обробкиданих,якщовсистемі клі-єнт/серверсаме насерверісистеми SQLServerбуде оброблятисьзапит, ане наклієнтськомукомп”ютері. Такожприрісту швидкостіроботи ODBCдає використаннявстроєннихпроцедур.
Тепер перейдемодопроцесів, щопов”язаніз вимірюваннямшвидкостісистеми SQLServer 7.0 . Уданнійроботі прпонуєтьсянаписанняпрограмного додаткунавстроєнному shell OSWindowsNT-JavaScript .Сампрограмнийдодаток цепрограма написанадляінтерпритуюча мова.Файлз розширенням . jsбудевиконавчим для OS Windows NT. Спочатку напишемо Script дляствореннябази даних:
// ADO Flags
var adLockOptimistic = 3;
var adOpenStatic = 3;
varSQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt"
//varSQL_DataBase = "DSN=OTStt;UID=;PWD="
var oConn;
var 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<100000;i++){
oRs.Addnew();
oRs("String").value="User"+i;
oRs("Number").value=i;
oRs("Random").value=Math.round(100*Math.random());
oRs.Update();
if(i%10000==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відповідаєза регістраціювSQLServer іутвореннябази данихDBTest .
DSN – ім”я зв”язку,визначаєтьсяпри утворенніджереладанихODBC.
UID – ідентифікаторкористувача,використовуєтьсяпри регістраціїнасервері, уSQLServerідентифікаторкористувача завждимаєпочинатись з“ sа ” .
PWD – або“ password ”кодове словодоступу ,необхідний длярегістраціїна сервері.Вданому випадкуневикористовуємо.
Функція Recordпроводитьзапис увсірядки базиданихDBTest створені значення , у стовбчикRandom – створені генераторомвипадковихчисел значеннявід0 до99 .
Кількістьрядків утаблицібуде 10 000,створеннязаймає 3,5хвилин.Стовбчик Numberбудеключем.
Напишемо щеодин Script , для тестуванняшвидкостіроботи SQLServer.Щоб визначетичас відповідіна запитякумога точнішебудемопосилати насерверне одинзапит , адекілька десятківоднаковихзапитів, обрахувавшисереднійчас відповідіотримаємоточний часобробкизапиту ізнаходженнясервером результуючоїмножиниелементів. Алетреба враховуватитакийвипадок - якщодляпідвищення точностіпослатидекілька сотеньоднаковихзапитів, то SQLServerпочнехешування таблицідляоптимізації своєїроботи
ірезультати роботибудутьне точні,оскількипри звичайномузапиті хешуваннятаблиці неробиться.
// ADO Flags
var adLockOptimistic = 3;
var adOpenStatic = 3;
varSQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt"
//varSQL_DataBase = "DSN=OTStt;UID=;PWD="
var oConn;
var 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=1000000;
Delta=0;
Ave=0;
WScript.echo("Query #"+TestNumber);
for(i=0;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
DBTESTORDERBY
String",50); Test( 3 ,"
SELECT *FROM DBTEST ORDERBY
Number ",50); Test
(4,"SELECT Sum(Number) FROM DBTEST GROUP
BYString",50); Test(5 , "
SELECT Sum(Number) FROM
DBTEST GROUP BY Random",50); Test( 6 , "
SELECT* FROM
DBTESTWHERE Number = 99999
" , 50); Test(7 ,"
SELECT *FROMDBTEST
WHEREString =
'User99999'",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
DBTESTWHEREString < ' User50000 ' ) ",50); Test(10 , "
SELECT * FROM
DBTEST WHERENumber
in(SELECT Number FROM DBTEST WHERE
String='User50000')", 50); Test(11,
" SELECT *
FROM DBTESTWHERE Number in (SELECT Number FROM DBTEST WHERE
String > ' User10000 ' ) " , 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тестівдля
тестуваннярізнихможли-востей
SQLServer.Розглянемо
їхдокладніше . Тести
12і 13характеризують швидкістьвставкиі
вилученняелементівубазіданих. Тест
14знищуєусю
таблицю. Запити
навибіркуінформації
: Тест
1:" SELECT * FROM
DBTEST " -виділитивсі
елементи ; Тест
2: " SELECT* FROM
DBTESTORDERBY
String"-відсортуватиусі
елементизазначенням
устовбчику“String”; Тест
3:" SELECT *FROM DBTEST
ORDERBY
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
DBTESTWHERE Number = 99999
" – визначитиусіелементи, у
яких значенняустовбчику
“ Number ” = 99999; Тест
7:" SELECT *FROMDBTEST
WHEREString = 'User99999'"
- визначитиусіелементи, у
якихзначенняу стовбчику “String “ = 'User99999' ; Тест
8 : "SELECT * FROM
DBTEST WHERE Number
in (SELECT Number FROM DBTEST ) "- визначити
усіелементиз
множиничисел ; Тест9 :"SELECT * FROM DBTEST WHERE Number in
(SELECT Number FROM
DBTESTWHEREString < ' User50000 ' ) " -
визначитиусіелементи
змножиниелементів, у
якихзначенняу стовбчику “String “ < ' User50000 '; Тест
10 : " SELECT * FROM
DBTEST WHERENumber
in(SELECTNumber FROM DBTEST WHERE
String='User50000')" - визначити
усіелементиз
множиниелементів, уяких
значенняу стовбчику “String “ =
' User50000'; Тест
11 : " SELECT * FROM
DBTESTWHERE Number in (SELECT
Number FROM DBTEST WHERE String > ' User10000 ' ) "- визначитиусі
елементизмножини
елементів, уякихзначення
у стовбчику “String “ > ' User10000' ; Частина 3 : РЕЗУЛЬТАТИТЕСТУВАННЯ Для
наведенняприкладууніверсальностіпри
використаннінаписан-ногоscriptпри
вимірюваннішвидкодії,виміряємо
швидкістьобробкизапитів
усистеміSQLServer
7.0таMicrosoftAccess 97. Щоб scriptсприймавсясистемою Accessбез
супереченьтребазмінити
параметри ідентифікації : //var
SQL_DataBase = "DSN=OTSt;UID=sa;PWD=;DATABASE=OTSt" var
SQL_DataBase = "DSN=OTStt;UID=;PWD=" Отриманірезультатиприведемо
утаблиці: Тест№ SQL Server7.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
- 'User50000'ззаймаєнабагато
меншечасуніж
пошук елементів,що
менше 'User50000'.Таких елементівприблизно
50 тисячіїх
пошукзаймаєдосить
довгийчас.Пошук
елементів, щобільше
'User10000'займаєу
серверащебільший
час. Запити
12,13визначаютьчас
занесеннядобази
новогорядкаі
вилученнярядказ
базиданих. Проводячи
наведенідослідженняза
роботоюсерверами
отримуємоповнухарактеристикуйого
роботи. Використаємо
наведенівищепрограмні
додаткиі проведемо
виміринаіншихSQL-серверах.
Порівняємошвидкостіроботи
SQLServer7.0іOracle 8: Тест№ SQL Server7.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 Server7.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 Server7.0
працюєповільнішеза Informix
приобробціпростих
запитів,апри
пошуку іпорівнянніелементів працює швидше.Назапитах
повставціі
вилученніелементіву Informix іSQLServer 7.0майжеоднакові результати. Таким
чиноммидосягли
метиданноїроботи -
побудувалипрограмнідодатки,
якимизмогливизначити
характеристикипрацездатностірізних
сервернихбазданих. В
результатіпроведенноїроботи
булорозглянуторізні
фактори,щовпливають
нашвидкістьроботи
системиSQLServer
7.0. Булинаписані
двіпрограми,що
даютьзмогувимірювати
швид-кістьобробкизапитів
багаторівневоюсерверноюсистемою MicrosoftSQL
Server7.0ітимсамим
даютьможливість досліджуватиефективність
настройкипараметрівсистеми,
даютьзмогуоцінити
оптимальністьпобудовибази
даних,оптимальністьвикористання
індексів, правил,обмежень,ефективність
роботизтранзакціями. Булирозглянуті
сильнііслабкі
бокитехнологійроботи
зпрограмнимидодатками
-DB-LibraryтаODBC зDAO. Як
прикладроботипрограмних
додатківотриманідані
прошвидкодіюсистем
базданих SQL Server7.0
таMicrosoftAccess 97. Порівняні
результатизастосування програмнихдодатків
усистемах SQL-серверів
такихякOracleта
Informixзшвидкістю
роботиMicrosoftSQL Server
7.0. Використовуючинаписані
script-и
програмістиірозробники
систембазданих
типуклієнт/серверможуть
визначатихарактеристикистворених
нимисистемз
ціллюаналізуі
удосконалення. СПИСОК
ВИКОРИСТАНОЇЛІТЕРАТУРИ : 1.
“Використання Microsoft
SQLServer 7.0”СтефанВінкоп вид. Москва 1999 р. 2.
“ Teach Yourself Oracle 8 In 21 Days”CaryN.
Prague 3.
“ Секреты Access97”Уильям
Амоизд.Диалектика1997р. 4.
“
ТехнологіяJava”Джо
Вебервид. “BHV”1996 р. 5.
Журнал“PCWorld” № 3,7,8за97 р., № 1,9
за98 р. 6.
www.techrepublic.com
ВИСНОВОК