SQL වැඩකාරයෝ එන්න .Transaction ගැන කතා කරන්න ඕනේ

119©

Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    මචන් ලා මේක මට ආපු ප්‍රශනයක් . මේ ලඟදි පොඩ්ඩක් transaction ගැන ටිකක් බැලුවා .මෙච්චර කාලෙකට ආපු නැති ප්‍රශ්නයක් ආව .

    SQL:
    --transaction 1
    
    BEGIN Transaction
    
    --some Query to update stock table
    
    Commit Transaction
    
    --transaction 2
    ------------------------------------
    BEGIN Transaction
    
    --some Query to update stock table
    
    Commit Transaction

    මෙතැනදී Transaction එකේ Isolation එක වෙන්නේ ReadCommited (by default SQL).

    Transaction දෙකම එකපාර වෙද්දී . පලවෙනි එක පටන් අරන් දෙවෙනි Transaction එක ඊළඟට යද්දී . පලවෙනි Transaction එකෙන් Table ලෝක් උනහම දෙවෙනි එකට යන්න බැහැනේ . එතොකොට ReadCommited එකේදී Lost Update Problem එකක් එන්නේ කොහොමද . ReadCommited Isolation එකේ LostUpdate ප්‍රොබ්ලම් තියෙන්නේ .

    මට එක පැහැදිලි මදී . Transaction block පාවිච්චි කරාට හරියට තේරුම් අරගෙන නැ මම .දන්නා කෙනෙක් කියල දෙන්න


    danne nathi aya bump ekak hari danna,
     
    Last edited:

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    උත්තරයක් දෙන්න දත්ත මදි

    1. මේ Transaction දෙකම එකකට පස්සේ එකක් ද රන් වෙන්නේ?
    2. මේ එකම ට්‍රාන්සක්ෂන් එක ඇප්ලිකේෂන් ඉන්ස්ටන්ස් දෙකකින් එක පාර රන් වෙනවා කියලද කියන්නේ?
     

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    උත්තරයක් දෙන්න දත්ත මදි

    1. මේ Transaction දෙකම එකකට පස්සේ එකක් ද රන් වෙන්නේ?
    2. මේ එකම ට්‍රාන්සක්ෂන් එක ඇප්ලිකේෂන් ඉන්ස්ටන්ස් දෙකකින් එක පාර රන් වෙනවා කියලද කියන්නේ?
    ඇත්තටම මට ඕන කරේ , Transaction ගැන පොඩ්ඩක් වැඩි පුර දැන ගන්න . මම නිකන් Transaction block එක දානවා ඇත්තටම වෙන Company වල කොහොමද පාවිච්චි කරන්නේ කියල Idea එකක් නැ .


    1) අපි හිතමු පලවෙනි එක රන් වෙන ගමන් දෙවෙනි එක රන් වෙන්නේ කියල . එකටම රන් වෙන්නේ පලවෙනි එක . ඊළඟට රන් වෙන්නේ දෙවෙනි එක .

    2)ඔව් ඉන්ස්ටන්ස් දෙකකින් කියල හිතමු .

    මට ඇත්තටම දන ගන්න ඕනේ Lost Update ප්‍රොබ්ලම් එක Read Commited එකේ තියනවා කියල කිව්වට. එක වෙන්නේ කොහොමද කියල තේරෙන්නේ නැ .එහෙම වෙන්න විදියක් නැ කියලයි මට හිතෙන්නේ . Table Lock වෙන නිසා . ඒ උනාට එක ඇත්තමට වෙනවා පහල තියන ලින්ක් එක බැලුවොත් . කොහොමද එහෙම වෙන්නේ

    https://codingsight.com/the-lost-update-problem-in-concurrent-transactions/
    මේකත් පොඩ්ඩක් බලන්න .
     
    Last edited:

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    ඇත්තටම මට ඕන කරේ , Transaction ගැන පොඩ්ඩක් වැඩි පුර දැන ගන්න . මම නිකන් Transaction block එක දානවා ඇත්තටම වෙන Company වල කොහොමද පාවිච්චි කරන්නේ කියල Idea එකක් නැ .


    1) අපි හිතමු පලවෙනි එක රන් වෙන ගමන් දෙවෙනි එක රන් වෙන්නේ කියල . එකටම රන් වෙන්නේ පලවෙනි එක . ඊළඟට රන් වෙන්නේ දෙවෙනි එක .

    2)ඔව් ඉන්ස්ටන්ස් දෙකකින් කියල හිතමු .

    මට ඇත්තටම දන ගන්න ඕනේ Lost Update ප්‍රොබ්ලම් එක Read Commited එකේ තියනවා කියල කිව්වට. එක වෙන්නේ කොහොමද කියල තේරෙන්නේ නැ .එහෙම වෙන්න විදියක් නැ කියලයි මට හිතෙන්නේ . Table Lock වෙන නිසා . ඒ උනාට එක ඇත්තමට වෙනවා පහල තියන ලින්ක් එක බැලුවොත් . කොහොමද එහෙම වෙන්නේ

    https://codingsight.com/the-lost-update-problem-in-concurrent-transactions/
    මේකත් පොඩ්ඩක් බලන්න .
    idapanw adaka inne
    uththare thiyanawa Explain karala dennam Hawasa
     

    Jack_Sparrow

    Well-known member
  • Jun 16, 2008
    42,522
    1
    16,928
    113
    Black Pearl
    ReadCommitted wala mulu table ekama lock wenne naha row eka lock wena. Repeatable Read eke tamai table ekama lock wenne.

    Transaction1 eka row ekak read kara karanawa, eke athule e row eka wenas karanawa.
    E asse Transaction 2 eka awith e row eka wenas karanawa. etakota Transaction 2 eke Lost update wenawa

    Table eka lock wenne nathi nisa Transaction 2 eka wena rows update karanawanam dekama parallel karanna puluwan
     
    Last edited:
    • Like
    Reactions: ThisaraMalintha

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    හරි ඔයාගේ කෙස් එක මෙහෙම හිතමු

    ටේබල් එකක් තියනවා මෙහෙම

    IdEntityCount
    1XXXXX12

    READ COMMITTED: A query in the current transaction cannot read data modified by another transaction that has not yet committed, thus preventing dirty reads. However, data can still be modified by other transactions between issuing statements within the current transaction, so nonrepeatable reads and phantom reads are still possible.


    දැන් ඔයාගේ කොන්කරන්ට් කනෙක්ෂන් දෙකකින් මේකේ Count එක අප්ඩේට් කරන්න යනවා.
    යට එක තේරෙනවනේ දැනට තියන count එක අරගෙන එකට එකක් අකතු කරලා අප්ඩේට් කරන එක කරන්නේ

    Code:
    declare @count int
    select @count = count from tbl_xxxx  where id = 1
    set @count = @count  + 1
    Update tbl_xxxx set count = @count  where id = 1

    දෙවෙනි එකනුත් අප්ඩේට් එකක් යනවා (count එකට දෙකක් එකතු කරනවා )

    Code:
    declare @count int
    select @count = count from tbl_xxxx  where id = 1
    set @count = @count  + 2
    Update tbl_xxxx set count = @count  where id = 1

    දැන් සෙලෙක්ට් එකක් දාල බැලුවොත් මොකද වෙන්නේ? count එක 15 වෙන්න ඕනේ නේ. එත් කොන්කරට් එකක READ COMMITTED තිබ්බොත් එහෙම වෙන්නේ නැ . ඒ මොකද "cannot read data modified by another transaction that has not yet committed" ආන්න පලවෙනි එකෙන් 1 ක් එකතු කරපු එක READ COMMITTED නිසා Read කරන්න බැනේ. එකෙන් වෙන්නේ පලවෙනි අප්ඩේට් එක කලේ න වගේ. ඒ කියන්නේ දෙවෙනි එකෙන් රීඩ් වෙන්නේ කමිට් කල අගයන් විතරයි. ඊ කියන්නේ 12 රීඩ් වෙන්නේ.දෙවෙනි අප්ඩේට් එකෙන් පස්සේ count එක select එකට එන්නේ 12 මයි. අප්ඩේට් එකෙන් 2 ක් එකතු වෙලා 14 වෙනවා.

    දැන් මේකෙදි පලවෙනි අප්ඩේට් එක නැති වෙනවා. ඔන්න ඕකට තමා කියන්නේ lost update කියල

    කරනවා නම් ඕක පලවෙනි එකට delay එකක් දාපන් තත්පර 5 ක විතර. මේ සින් එක Snapshot සහ Serializable isolation levels වලදී එන්නේ නැ.
     

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    ReadCommitted wala mulu table ekama lock wenne naha row eka lock wena. Repeatable Read eke tamai table ekama lock wenne.

    Transaction1 eka row ekak read kara karanawa, eke athule e row eka wenas karanawa.
    E asse Transaction 2 eka awith e row eka wenas karanawa. etakota Transaction 2 eke Lost update wenawa

    Table eka lock wenne nathi nisa Transaction 2 eka wena rows update karanawanam dekama parallel karanna puluwan
    ඔව් මචන් row එක lock උනාම පලවෙනි Transaction එකෙන් , 2 Transaction එකෙන් SELECT එක run වෙන්න බාහැ නේද පලවෙනි එකෙන් ROW එකේ lock එකක් තියන නිසා . mokada Transaction 2 ma row ID eka samanai.
    හරි ඔයාගේ කෙස් එක මෙහෙම හිතමු

    ටේබල් එකක් තියනවා මෙහෙම

    IdEntityCount
    1XXXXX12




    දැන් ඔයාගේ කොන්කරන්ට් කනෙක්ෂන් දෙකකින් මේකේ Count එක අප්ඩේට් කරන්න යනවා.
    යට එක තේරෙනවනේ දැනට තියන count එක අරගෙන එකට එකක් අකතු කරලා අප්ඩේට් කරන එක කරන්නේ

    Code:
    declare @count int
    select @count = count from tbl_xxxx  where id = 1
    set @count = @count  + 1
    Update tbl_xxxx set count = @count  where id = 1

    දෙවෙනි එකනුත් අප්ඩේට් එකක් යනවා (count එකට දෙකක් එකතු කරනවා )

    Code:
    declare @count int
    select @count = count from tbl_xxxx  where id = 1
    set @count = @count  + 2
    Update tbl_xxxx set count = @count  where id = 1

    දැන් සෙලෙක්ට් එකක් දාල බැලුවොත් මොකද වෙන්නේ? count එක 15 වෙන්න ඕනේ නේ. එත් කොන්කරට් එකක READ COMMITTED තිබ්බොත් එහෙම වෙන්නේ නැ . ඒ මොකද "cannot read data modified by another transaction that has not yet committed" ආන්න පලවෙනි එකෙන් 1 ක් එකතු කරපු එක READ COMMITTED නිසා Read කරන්න බැනේ. එකෙන් වෙන්නේ පලවෙනි අප්ඩේට් එක කලේ න වගේ. ඒ කියන්නේ දෙවෙනි එකෙන් රීඩ් වෙන්නේ කමිට් කල අගයන් විතරයි. ඊ කියන්නේ 12 රීඩ් වෙන්නේ.දෙවෙනි අප්ඩේට් එකෙන් පස්සේ count එක select එකට එන්නේ 12 මයි. අප්ඩේට් එකෙන් 2 ක් එකතු වෙලා 14 වෙනවා.

    දැන් මේකෙදි පලවෙනි අප්ඩේට් එක නැති වෙනවා. ඔන්න ඕකට තමා කියන්නේ lost update කියල


    කරනවා නම් ඕක පලවෙනි එකට delay එකක් දාපන් තත්පර 5 ක විතර. මේ සින් එක Snapshot සහ Serializable isolation levels වලදී එන්නේ නැ.
    මචන් row එක lock උනාම පලවෙනි Transaction එකෙන් , 2 Transaction එකෙන් SELECT එක run වෙන්න බාහැ නේද පලවෙනි එකෙන් ROW එකේ lock එකක් තියන නිසා .A query in the current transaction cannot read data modified by another transaction that has not yet committed.එතොකොට ලොක් එක අත ඇරපුවහම තමයි කියන හැටියට select එක රන් වෙන්න ඕනේ . එතොකොට Transaction එක ගියා Commite වෙලා . දැන් Read පුළුවන් .එතොකොට update උන අගය read වෙන්න ඕනේ . එත් ඔකේ කියන්නේ මම තේරුම් ගත්ත දේ නෙමේ . මට තේරෙන්නේ නෑද්ද මේක .:(

    Ethakota machan eaka permanently lost da ? It returns an error ?
    permanently lost machan ,REPEATABLE READ demmoth Thamai Error eka enne.kalin transaction eka run wena nisa.mata terenne natte row lock ekak yaddi kohomada deweni transaction eken read karanne kiyala
    ------ Post added on Jun 2, 2021 at 3:52 PM
     
    Last edited:
    • Like
    Reactions: HAneo

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    මචන් row එක lock උනාම පලවෙනි Transaction එකෙන් , 2 Transaction එකෙන් SELECT එක run වෙන්න බාහැ නේද පලවෙනි එකෙන් ROW එකේ lock එකක් තියන නිසා .A query in the current transaction cannot read data modified by another transaction that has not yet committed
    yana transaction block eka Commit or RollBack wenakan read karanna ba eka thama READ COMMITTED kiyanne. e nisa thama palaweni ekakin anika override wenne. eka tran ekak aniwa lost wenawa.
     

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    yana transaction block eka Commit or RollBack wenakan read karanna ba eka thama READ COMMITTED kiyanne. e nisa thama palaweni ekakin anika override wenne. eka tran ekak aniwa lost wenawa.
    machan mehema hithuwoth. yana transaction block eka commit or rollback wenkan read karanan ba eka nisa.palaweni transaction eka commit unahama update una value eka deweni eken read karaddi.updated value ekane enne. ethokota lost wenna bahane.
     

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    machan mehema hithuwoth. yana transaction block eka commit or rollback wenkan read karanan ba eka nisa.
    Me kathawa hari
    palaweni transaction eka commit unahama update una value eka deweni eken read karaddi.updated value ekane enne. ethokota lost wenna bahane.
    Oya mama dapu query deka eka paara run wenna one. ehema unama Begin tran ekak mada thama second eka wadinne. first eken update kala eka hari but deta commit wela na. (e kiyanne count eka 12 thiyena eka 1k update karala 13 una eka) .
    But
    nonrepeatable reads and phantom reads are still possible.

    me nisa danata row eke thiyana 12 value eka read karala second eken +2 ekka 14 wenawa.
     

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    Me kathawa hari

    Oya mama dapu query deka eka paara run wenna one. ehema unama Begin tran ekak mada thama second eka wadinne. first eken update kala eka hari but deta commit wela na. (e kiyanne count eka 12 thiyena eka 1k update karala 13 una eka) .
    But
    nonrepeatable reads and phantom reads are still possible.

    me nisa danata row eke thiyana 12 value eka read karala second eken +2 ekka 14 wenawa.
    Kathawa teruna machan ela kiri,thanks machan.mama mechara kal nikan begin tran end tran demme, isolation level set kare na, normally kohomada oyala stock ekakata transaction block danne isolation level danne. Ehema danawada?
     
    • Like
    Reactions: HAneo

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    Kathawa teruna machan ela kiri,thanks machan.mama mechara kal nikan begin tran end tran demme, isolation level set kare na, normally kohomada oyala stock ekakata transaction block danne isolation level danne. Ehema danawada?
    The way I see this if you do not implement proper Asynchronisation with this Transaction scoping then you are dead.
    APi business eke mula idan balanna one mona point da Async Task widihata yanna one. mona point da block karanna one kiyala.

    For ex:
    Request Product list. apita puluwan meka full async karanna. nor harm done ne.

    Update stock Available QTY- we can handle these multiple ways
    1. Full Asyncronisation with SQL Pools (dan sale record gahanakota e ekkama Stock eka update eka gahanawane Ekama SP eka. anna eka thama case eka. transaction Block eka loku wadi. take time to Commit. me athare Dead lock awilla Update lost wenawa. )
    - Web waladi eka end point ekak thiyaganna just for update stock. any time you need to update or Request Stock use that end point
    Meka athule Update wena ewa Syncronus karanna. (Best solution is a Queue ekak daanna. so one after another thama update wenne.)

    mekedi problem eka update unada nadda kiyala eka paara Confirmation ekak nane. ekata karanna one 3 step messaging daganna

    1. Do you want to Update Stock? - methanadi update eka karanawa
    2. Data sent for update - Imidiatle after update Request sent displays this message to the user. so he knows and wait for another message
    3. Your Stock record updates Success - After Queue processed and thread returns with data to Async method then display this message


    2. Reserve stock ekak thiyagannawa. (normally ERP ekaka day end ekak yanawa. api mada wena sale reord gahanne na DB ekata kelinma. okkoma sale tika balala Day end ekedi sale update karanawa. online stock one nam virtual stock eken thama denne. eka may or may not accurate stock at hand any given point. eth Day end eken passe Actual Stock 100% correct mokada lost nathuwa data wadina nisa)
     

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    The way I see this if you do not implement proper Asynchronisation with this Transaction scoping then you are dead.
    APi business eke mula idan balanna one mona point da Async Task widihata yanna one. mona point da block karanna one kiyala.

    For ex:
    Request Product list. apita puluwan meka full async karanna. nor harm done ne.

    Update stock Available QTY- we can handle these multiple ways
    1. Full Asyncronisation with SQL Pools (dan sale record gahanakota e ekkama Stock eka update eka gahanawane Ekama SP eka. anna eka thama case eka. transaction Block eka loku wadi. take time to Commit. me athare Dead lock awilla Update lost wenawa. )
    - Web waladi eka end point ekak thiyaganna just for update stock. any time you need to update or Request Stock use that end point
    Meka athule Update wena ewa Syncronus karanna. (Best solution is a Queue ekak daanna. so one after another thama update wenne.)

    mekedi problem eka update unada nadda kiyala eka paara Confirmation ekak nane. ekata karanna one 3 step messaging daganna

    1. Do you want to Update Stock? - methanadi update eka karanawa
    2. Data sent for update - Imidiatle after update Request sent displays this message to the user. so he knows and wait for another message
    3. Your Stock record updates Success - After Queue processed and thread returns with data to Async method then display this message


    2. Reserve stock ekak thiyagannawa. (normally ERP ekaka day end ekak yanawa. api mada wena sale reord gahanne na DB ekata kelinma. okkoma sale tika balala Day end ekedi sale update karanawa. online stock one nam virtual stock eken thama denne. eka may or may not accurate stock at hand any given point. eth Day end eken passe Actual Stock 100% correct mokada lost nathuwa data wadina nisa)
    me solution eka nam niyamai. Queue ekak dana eka thamai hondama de.Mobile eken sysnc karath ekapara godak denek Queue ekakata daganna puluwan. attatama honda Exp thiyana kenek gawa weda karanna labuna nam godak dewal igena ganna thibba. mama thaniyama me wage dewal igena ganne, Loku projects wala weda karala na,hamadama parana dewal walata ana gagaha innawa.:( ., patta asai loku projects wala weda karanna .oyata godak sthuthi meka explain karanna loku kalayak gatta ta . Thanks a lot bro.
     
    • Like
    Reactions: HAneo

    HAneo

    Well-known member
  • Jan 30, 2007
    12,970
    29,168
    113
    Homagama
    me solution eka nam niyamai. Queue ekak dana eka thamai hondama de.Mobile eken sysnc karath ekapara godak denek Queue ekakata daganna puluwan. attatama honda Exp thiyana kenek gawa weda karanna labuna nam godak dewal igena ganna thibba. mama thaniyama me wage dewal igena ganne, Loku projects wala weda karala na,hamadama parana dewal walata ana gagaha innawa.:( ., patta asai loku projects wala weda karanna .oyata godak sthuthi meka explain karanna loku kalayak gatta ta . Thanks a lot bro.
    thaniyen gahana game eka thama hodama
    Mama kaleth ekama thama. eth mama industry eke wada kala.
    somehow you need to get that experiance. there is lot more to learn
     
    • Like
    Reactions: ThisaraMalintha

    119©

    Well-known member
  • Sep 29, 2012
    2,411
    2,151
    113
    ~ගෙදර~
    thaniyen gahana game eka thama hodama
    Mama kaleth ekama thama. eth mama industry eke wada kala.
    somehow you need to get that experiance. there is lot more to learn
    Industry eke labena exp eka watinawa. mewa baluwata apply wenna ona than gana idea ekak na , Mama inne patta parana technolgy use karana thanaka. mewa tikak igena gena paninna one , salary eka normal ganak hamba unath mewa igena ganna thanakata set wenna thiyanawa nam patta. re nidi maran hari weda karanna asai.kawadawath ehema thanak nam set welama na mata.try karanna one. mona hari case ekak thibboth pm ekak dannam podi sup ekak denna bro.
     
    • Like
    Reactions: HAneo