Changes between Initial Version and Version 1 of Phase2


Ignore:
Timestamp:
09/04/25 01:25:18 (3 weeks ago)
Author:
213280
Comment:

Creation of phase2

Legend:

Unmodified
Added
Removed
Modified
  • Phase2

    v1 v1  
     1== Трансакции во MSSQL ==
     2
     3Трансакциите се битен дел од системите за управување со бази на податоци преку кои се обезбедува атомичност, конзистентност, изолација и трајност (ACID).
     4
     5Со други зборови, сите операции групирани во една трансакција или ќе се извршат во целост или воопшто нема да се извршат.
     6
     7
     8==== Во '''SQL Server''' клучни зборови кои се користат кога станува збор за трансакции се: ====
     9
     10----
     11
     12-       BEGIN TRANSACTION – почеток на трансакција
     13-       COMMIT TRANSACTION – потврдување на трансакција
     14-       ROLLBACK TRANSACTION – поништување на промените
     15-       SAVE TRANSACTION – дефинирање на savepoint
     16
     17----
     18
     19===== Нивоа на изолација на трансакциите во '''SQL Server''': =====
     20
     211. READ UNCOMMITTED – најниско ниво на изолација. Овозможува пристап до податоци кои не се потврдени од други трансакции (т.н. '''dirty reads''').
     22
     23   ''Пример:''
     24
     25   {{{
     26   #!sql
     27       SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
     28       BEGIN TRANSACTION;
     29
     30       SELECT IsAvailable FROM [dbo].[FoodItem] WHERE name LIKE N’%Coffee%’;
     31   }}}
     32
     33   Во ваквото сценарио, доколку друга трансакција направи UPDATE врз полето IsAvailable на истиот запис, но сè уште не е COMMIT, првата трансакција ќе може да ја види таа непотврдена промена.
     34
     35----
     36
     372. READ COMMITED - Ова е '''стандардното ниво во SQL Server.''' Податоците што ги гледа една трансакција секогаш се потврдени (committed) од други трансакции. Но, тоа значи дека една иста SELECT изјава може да врати различни резултати ако во меѓувреме друг корисник направи COMMIT.
     38
     39   (Ова ниво дозволува non-repeatable reads и phantom reads.) додека спречува dirty reads.
     40
     41   ''Пример:''
     42   
     43   {{{
     44   #!sql
     45       SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
     46       BEGIN TRANSACTION;
     47
     48       SELECT * FROM Orders WHERE CustomerId = 1;
     49   }}}
     50
     51----
     52
     53
     543. REPEATABLE READ - Ова ниво осигурува дека сите редови што се прочитани од трансакцијата не можат да бидат изменети од друга трансакција додека не заврши. Сепак, можат да се појават '''phantom rows''' (нови редови кои се вметнати од други трансакции и одговараат на критериумот).
     55
     56   ''Пример:''
     57   
     58   {{{
     59   #!sql
     60       SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
     61       BEGIN TRANSACTION;
     62
     63       SELECT COUNT(*) AS total_orders_created
     64       FROM [dbo].[Order] 
     65       WHERE OrderGlobalStatus = 1;
     66   }}}
     67 
     68   Во ова сценарио, истите редови ќе останат достапни во истата состојба за време на целата трансакција.
     69
     70
     71----
     72
     73
     744. SERIALIZABLE - Највисокото класично ниво на изолација. Сите конкурентни трансакции се извршуваат како да се серијализирани една по друга. Се спречуваат и '''phantom reads''' преку поставување на range locks.
     75
     76   ''Пример:''
     77   
     78   {{{
     79   #!sql
     80    SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
     81    BEGIN TRANSACTION;
     82       
     83    UPDATE [dbo].[FoodItem] SET Price = 10 WHERE Id = 5;
     84   }}}
     85 
     86   Ако друга трансакција се обиде да го измени истиот ред со UPDATE, ќе мора да почека или ќе добие '''deadlock error'''.
     87
     88
     89----
     90
     91
     925. SNAPSHOT (SQL Server) - Ова е ниво на изолација кое постои во '''SQL Server'''. Овозможува читање на '''конзистентна слика''' на податоците во моментот на започнување на трансакцијата. Сите SELECT-и во рамките на истата трансакција ја гледаат базата како што била во моментот на старт, без блокирање.
     93
     94   ''Пример:''
     95   
     96   {{{
     97   #!sql
     98       ALTER DATABASE [QuickBite] SET ALLOW_SNAPSHOT_ISOLATION ON;
     99
     100       SET TRANSACTION ISOLATION LEVEL SNAPSHOT;
     101       BEGIN TRANSACTION;
     102
     103       SELECT * FROM [dbo].[Order] WHERE BusinessId = 3;
     104   }}}
     105 
     106   Ова е многу корисно за системи каде се бара висока конкурентност без премногу заклучувања (lock contention).
     107
     108=== Тестирање на трансакции и конкурентно извршување на ресурси со помош на Apache JMeter ===
     109
     110===== ''Тест 1: Креирање на random Order;'' =====
     111
     112- Number of threads = 1
     113
     114[[Image(insert_random_order_1_thread.png, 500px)]]
     115
     116- Number of threads = 100
     117
     118[[Image(insert_random_order_100_thread.png, 500px)]]
     119
     120- Number of threads = 1000
     121
     122[[Image(insert_random_order_1000_thread.png, 500px)]]
     123
     124===== ''Тест 2: Креирање на random Order заедно со историја на нарачката Order_History во истата трансакција'' =====
     125
     126- Number of threads = 100
     127
     128[[Image(multiple_insert_single_transaction_100_thread.png, 500px)]]
     129
     130
     131
     132