Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

A határidő és az időperiódus olyan alkalmazásobjektumok, amelyek egy dátum és számos egyéb paraméter kombinációja, amelyek lehetővé teszik a rendszer számára, hogy pontosan határozza meg a regiszter táblákból származó adatok lekérését.
Például gyakori helyzet a több dokumentum jelenléte egy másodpercen belül - ebben az esetben a fejlesztők a dokumentum helyzetét használják a maradványok helyes feldolgozásához a gazdaság feldolgozásában, mert Ha egyszerű dátumot használ, előfordulhat, hogy az adatok helyesek.
A Border és az Time Moment használata azonban csökkenti a teljesítményt azáltal, hogy lelassítja az elemi igényeket is virtuális táblázatokra.

Vegyünk egy konkrét példát.

Vegyük az "áruk és raktárak" felhalmozási nyilvántartását, és kapjuk meg a maradékokat a Nómenklatúra és a raktár szerinti kiválasztással.

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

(az ideiglenes táblázatokban a nómenklatúra és az értéktartók kicsit)

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

Van egy további index a Raktár mérésére.

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

Az "időszak" paraméterhez eltérő értékű lekérdezést hajtunk végre:

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

Többször is végrehajtjuk ezeket a lekérdezéseket, és a következő eredményeket kapjuk:

A méréseket a MSSQL szerver "Max. Párhuzamossági fokozat" 3 különböző értékére végzik.

Vannak különböző vélemények a MAXDOP paraméterről. Az 1C-becenevek gyakrabban telepítik az egységet. És itt van például a DBA-nézet, amely más típusú alkalmazásokat is alkalmaz. :)
De a kérdés más.

Mind a négy esetben a platform körülbelül ugyanazokat a lekérdezéseket generálja két részből:

A végső egyenleg a két táblázat közötti különbségből származik.

Az eredmények teljesítmény szerinti kiválasztásával minden rendben van - az asztal fürtözött indexe minden olyan dimenzióval, amelyre a lekérdezési feltételek jól alkalmazhatók.

De a mozgás táblázatából származó minta egyértelműen problémát jelent.

Dokumentumpozícióval rendelkező állapot esetén a lekérdezés úgy néz ki, mint:

Egy dátummal rendelkező állapot esetén a lekérdezés úgy néz ki, mint:

Nyilvánvalóan az első esetben a lekérdezés összetettebb az érzékelő által az optimalizáló számára.

Mindkét lekérdezést kiadjuk az SQL Server felügyeleti stúdióban, és megnézzük, hogyan hajtják végre azokat:

I / O statisztikák és végrehajtási idő:

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

Az első lekérdezés (a dokumentum pozíciójából) 4,5-szer hosszabb volt a másodiknál, és 8-szor több logikai leolvasást igényelt.

Teljesítményhiba, amikor egy dokumentumelemet használ a dátum helyett a virtuális táblázatokban

A szerkezet azonos, de az alkalmazott paraméterek eltérőek.
Az első Seek Predicate kérelemhez csak egy van megadva (az időtartam kisebb, mint május 1), és a második esetében mindkét időszakra vonatkozó korlátozás van megadva.

A probléma megoldása:

Ha a probléma az Ön által megerősített, akkor kívánatos, hogy a lekérdezések periódusainak a virtuális táblákhoz való kiválasztása során lehetőleg ne használják a Határt és az Idő pillanatát. Ha ilyen kérelem van a dokumentumban, akkor a dokumentum pozíció többi részének kiválasztása nem mindig szükséges, de csak akkor, ha a dokumentum NEM az elsõ egy másodpercben, és a dokumentumok hatással vannak egymásra. A munkafolyamat mennyiségétől függően ez jelentősen csökkentheti a nem kívánt paraméterekkel végrehajtott lekérdezések számát.

Például, amikor dokumentumot ír, figyelje, hogy a nyilvántartásban egy adott másodpercben bejegyzések vannak-e ugyanannak a raktárnak az aktuális dokumentumához képest. Ha nem, akkor válassza ki a maradékokat dátum szerint, ha igen - a dokumentum pozíciója szerint:

Ugyanakkor a kérelem leegyszerűsítésének egy változata van a dokumentum pozíciójával, amely lehetővé teszi a probléma kiküszöbölését. Sajnos csak a platform fejlesztői képesek erre.
Ezt a helyzetet és az optimalizálási lehetőséget ismertetem a partnerkonferencián.
Ki férhet hozzá - köszönetet mondok a "+1" -nek ebben a témában.

Kapcsolódó cikkek