LOCKTABLE

lyot
Member Posts: 202
Hallo,
Ik heb gelezen dat vooraleer een repaet lus te coderen men beter eerst het volgende eens bekijkt.
1) kleine recordset <500 records
2) grote recordset >500 records
3) aanpassingen in te doorlopen recordset
Ik heb het voornamelijk over geval (1), daar raadt MS aan om op de volgende manier te werk te gaan.
Mijn vraag is nu of de LOCKTABLE functie enkel de gefilterde recordset zal locken of toch de ganse tabel Bin.
Ik hoop ten zeerste dat het het eerste is... :?
PS:db is op sql
Ik heb gelezen dat vooraleer een repaet lus te coderen men beter eerst het volgende eens bekijkt.
1) kleine recordset <500 records
2) grote recordset >500 records
3) aanpassingen in te doorlopen recordset
Ik heb het voornamelijk over geval (1), daar raadt MS aan om op de volgende manier te werk te gaan.
lrecBin.RESET; lrecBin.SETRANGE("Location Code",pcodLocation); lrecBin.SETRANGE("Zone Code",pcodZone); lrecBin.LOCKTABLE; IF lrecBin.FINDSET THEN REPEAT //code UNTIL lrecBin.NEXT=0;
Mijn vraag is nu of de LOCKTABLE functie enkel de gefilterde recordset zal locken of toch de ganse tabel Bin.
Ik hoop ten zeerste dat het het eerste is... :?
PS:db is op sql
0
Answers
-
Alleen de recordset. Tenminste, als je de juiste SETCURRENTKEY toevoegd en er een passende SQL index is.
LOCKTABLE is een erfenis uit de Native database en zou beter LOCKRECORDSET kunnen heten teneinde minder spraakverwarring te veroorzaken. Helaas.
Let op dat Navision een isolation level op transactieniveau zet. De volgende actie op deze tabel is altijd met UPDLOCK of je dat nu leuk vindt of niet.0 -
Mark Brummel wrote:Alleen de recordset. Tenminste, als je de juiste SETCURRENTKEY toevoegd en er een passende SQL index is..
lrecBin.SETCURRENTKEY("Location Code","Zone Code",Code)
Bepaalt SQL niet reeds de optimale key voor mijn query?Mark Brummel wrote:Let op dat Navision een isolation level op transactieniveau zet.
De volgende actie op deze tabel is altijd met UPDLOCK of je dat nu leuk vindt of niet.0 -
De Query optimiser zal inderdaad de beste index voor de job bepalen. Alleen als je geen SETCURRENTKEY toevoegd zal de ORDER BY gewoon de clustered index sortering zijn. De Query Optimiser zal dan eerder geneigd zijn om een kleine table te scannen omdat 'm geen sortering hoeft te doen.
SETCURRENTKEY is altijd beter in dit soort gevallen.
Als er geen SQL Index voor de job is zal SQL de next best zoeken of alsnog een index scan doen en te tabel op slot gooien.
In jouw voorbeeld zal de query iets zijn van SELECT TOP 500 FROM BLABLA WITH(UPDLOCK) WHERE BLABLA
De volgende keer als je binnen dezelfde transactie (Dus zonder COMMIT) een FINDSET(FALSE) doet zal de driver toch een UPDLOCK genereren omdat de oude Native database dat ook deed.
Ik weet het, het is jammer maar don't shoot the messenger...0 -
Mark Brummel wrote:De volgende keer als je binnen dezelfde transactie (Dus zonder COMMIT) een FINDSET(FALSE) doet zal de driver toch een UPDLOCK genereren omdat de oude Native database dat ook deed.
Maar begrijp ik nu correct dat niemand anders deze kan lezen tijdens mijn transactie?? :shock:0 -
Zucht...
Je begrijpt me helemaal verkeerd. Dit is zwaar complexe theorie en normaal geef ik hier 2 daagse workshops over.
Het standaard isolation level voor lezen is READUNCOMMITTED dus iedereen kan gewoon lezen tijdens jou transactie.0 -
Mark Brummel wrote:Het standaard isolation level voor lezen is READUNCOMMITTED dus iedereen kan gewoon lezen tijdens jou transactie.
Oké, het geeft enkel een probleem als ik tijdens diezelfde transactie (na de locktable) een findset wil uitvoeren.
Gelukkig is dit in mijn geval (nog) niet zo... [-o<
Alvast bedankt voor de hulp! =D>0 -
Graag gedaan.
Binnenkort mag ik spreken op een belgische MSDN avond. Misschien zie ik je daar.0 -
Categories
- All Categories
- 73 General
- 73 Announcements
- 66.6K Microsoft Dynamics NAV
- 18.7K NAV Three Tier
- 38.4K NAV/Navision Classic Client
- 3.6K Navision Attain
- 2.4K Navision Financials
- 116 Navision DOS
- 851 Navision e-Commerce
- 1K NAV Tips & Tricks
- 772 NAV Dutch speaking only
- 617 NAV Courses, Exams & Certification
- 2K Microsoft Dynamics-Other
- 1.5K Dynamics AX
- 320 Dynamics CRM
- 111 Dynamics GP
- 10 Dynamics SL
- 1.5K Other
- 990 SQL General
- 383 SQL Performance
- 34 SQL Tips & Tricks
- 35 Design Patterns (General & Best Practices)
- 1 Architectural Patterns
- 10 Design Patterns
- 5 Implementation Patterns
- 53 3rd Party Products, Services & Events
- 1.6K General
- 1.1K General Chat
- 1.6K Website
- 83 Testing
- 1.2K Download section
- 23 How Tos section
- 252 Feedback
- 12 NAV TechDays 2013 Sessions
- 13 NAV TechDays 2012 Sessions