Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Mit fog tanulni ezt a cikket?

  • Most megtudhatod, a variációk gyorsulási adatok feldolgozási műveletek
  • Tanulj meg futni „1C: Enterprise 8” több helyről
  • Megtanulod a korlátozások többszálas az 1C

Rendszeresen szükség van, hogy felgyorsítsa bizonyos szakaszain kódot, amelyek nem képesek, hogy gyorsítsa fel egy alkalmi ismeretség.

Vegyük példaként a kirakodás és / vagy terhelést nagy mennyiségű adat.

Ebben az esetben a „szalag teljesítménye” gyakran közvetlenül hat teljesítményű hardver. Ennek során a be- és kirakodás eljárások elég hosszú ideig, gyakran órákban mérhető.

Nem mindenki tudja, hogy a platform „1C: Enterprise 8” része a művelet nem hajtható végre párhuzamosan. egyidejű végrehajtása több szálat.

Ez a többszálú teljes mértékben alkalmazható abban az esetben, ha kell kezelni független adatok blokkokat. Különösen, hogy hozzon létre egy nagy mennyiségű adat elemek elvégzéséhez gazdaság dokumentumokat, amelyek nem metszik az értékeket a mérési sorozat, hogy egy masszív frissítés elemek könyvtárak, hajtsa végre az adatok betöltése a regiszterek stb

Vegyük például a feladat: meg kell frissíteni a kellékek „ár” minden eleme a könyvtár „áruk”. Az elemek száma kalauz „Áruk” egyenlő, mint 100.000.

A legegyszerűbb és legkézenfekvőbb megoldás teljesít az alábbiakban kezelő kód, amely gyorsan írva, de ez igen hosszú ideig tart:

NaServere
ObnovitTsenu () eljárás
VremyaNachala TekuschayaData = ();

TablitsaTovarov = Zapros.Vypolnit () .Vygruzit ();

Időtartam = TekuschayaData () - VremyaNachala;

Jelentés ( "Időtartam:" Időtartam + + „s.„);

Ebben az esetben végrehajtott feldolgozás 1187 másodperc = 19,7 perc.

Most használd a többszálú futtatását. kezelő kód újraírása az alábbiak szerint:

NaServere
ObnovitTsenu () eljárás

TablitsaTovarov = Zapros.Vypolnit () .Vygruzit ();

// meghatározza a maximális számát adatfolyamok
ChisloPotokov = 8;

// az adatmennyiség feldolgozására részek minden egyes menet
RazmerPortsii = Int (ChisloStrokaVTablitse / ChisloPotokov);

// tömb, amely tárolja a háttérben munkahelyek
MassivZadany = new Array;

A NomerPotoka = 1 ciklusban ChisloPotokov

// Az index adatok kezdete adatfolyam feldolgozása
// különböző szálak feldolgozására különböző részein az asztal
IndeksNachala = (NomerPotoka - 1) * RazmerPortsii;

Ha (NomerPotoka = ChisloPotokov) Ezután
// ha ez az utolsó patak, feldolgozza az összes többi adat
// mivel Az adatfolyamok száma nem lehet több a sorok számát a táblázatban
RazmerPortsii ChisloStrokVTablitse = - (ChisloPotokov RazmerPortsii *) + RazmerPortsii;
ENDIF;

// meghatározása tömb paraméter Eljárások
NaborParametrov = new Array;
NaborParametrov.Dobavit (TablitsaTovarov);
NaborParametrov.Dobavit (IndeksNachala);
NaborParametrov.Dobavit (RazmerPortsii);

// indítani háttérfeladat
Referencia = FonovyeZadaniya.Vypolnit ( "ObschiyModul1.ObnovitTsenuTovara" NaborParametrov.);

// Új feladat egy tömb, majd nyomon követni a teljesítményt
MassivZadaniy.Dobavit (Quest);

// eredményeinek ellenőrzésére háttér munkahelyek
Ha MassivZadaniy.Kolichestvo ()> 0 Then
kísérlet
FonovyeZadaniya.OzhidatZaversheniya (MassivZadany);
kivétel
// fellépés hiba esetén
KonetsPopytki;
ENDIF;

Időtartam = TekuschayaData () - VremyaNachala;

Jelentés ( "Időtartam:" Időtartam + + „s.„);

általános kód modul:

ObnovitTsenuTovara eljárás (TablitsaTovarov. IndeksNachala. RazmerPortsii) Export

Margin = 1,10; // 10% felár

// frissítse az ár csak egy bizonyos részét az asztalon
CQ = 1 ciklusban RazmerPortsii
Index =. (Cq = 1. IndeksNachala index + 1);

Esetünkben használunk nyolc szál, az ár frissítést hajtottunk végre 859 másodperc vagy 14,3 perc.
Azaz, a feldolgozás azonos táblázatot az értékek párhuzamosan egész szál vezet nyereség sebességet.

A kód fut egy virtuális gép, egy processzorral nélkül RAID tömbök. A valódi és jó „hardver” nyereség sebesség lesz jóval.

Megjegyzendő, hogy ez a probléma megoldható más módon, az általunk megadott egyetlen példa végrehajtását.

Fontos! Nem kell telepíteni túl sok szál, mint egy nagy növekedési üteme ettől még mindig nem kap egy stabil munkahely meghiúsulhat.

A legjobb az, hogy az 8-10 szálak és az optimális mennyiségű kísérleti úton meghatározható.

Próbáld ki magad egy kísérlet alapja és feldolgozási letölthető itt.

PDF-változata a cikket a csoport tagjai VKontakte

35 órás képzés, felkészítés az 1C: Expert, megfelelő beállítását a szerver oldalon, kód optimalizálása, a terhelés ellenőrző berendezések és egyéb felnőtt dolgokat.

29 Responses to Hogyan viselkedni felgyorsít 1C - többszálas adatfeldolgozás

Helló
Ott a konfigurációs kód „FonovyeZadaniya.OzhidatZaversheniya” ezt a kódot a fájlban alapja nem igazán működik, vagy fog futni nagyon lassú?
A probléma az, hogy ha elkezd ez a módszer, nincs látható munkafolyamat: nincs fellebbezés a processzor vagy a fájlok vár több mint 20 percig nem látható eredmény. A konfigurátor nem látja a háttérben létrehozott munkahelyre.
Bekapcsolva SQL Server adatbázis a módszer működik, le egy pár percig.
Mi lehet a probléma?
Köszönöm.

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

„A probléma” a fájl-alapú, van a háttérben feladat nem működik, mert a kliens-szerver módban. E példa célja az ügyfél-kiszolgáló kiviteli alakban.

Jó napot!
Ha ezt a módszert alkalmazzák a párhu- feldolgozás nagy táblázatban megadott értékek nem kér kódot kapott, aránytalan növekedése által elfoglalt térfogat a memóriában volt látható, ha át azt a háttér munka, egyenlő 2-3 szállított mennyiségek asztal, míg ha a futási háttér munkahelyek elég gyakran előfordul keresztül 2-3 nap van egy hátborzongató lelassul workflow alkalmazás szerver menti csak újraindul. Vannak hatékonyabb módja adatok továbbítására a háttérben munka, írás nélkül az adatbázis? Vagy az eljárás segítségével a növekedés és a megjelenése memória fogyasztás?

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Például, az optimalizálás egy ilyen helyzet szerves része a végső feladat a során optimalizálás.

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

1. Van-e hatékonyabb módon történő adatátvitelre a háttérben munka, írás nélkül az adatbázis?
-
Lehet, hogy van, de én nem tudom. Bár én nem látok semmi baj azzal, hogy az lenne, hogy levelet adat az adatbázisban közötti cseréjét FZ.

2. Vagy olyan módon, hogy ellenőrizzék a növekedés és a megjelenése memória fogyasztás?
-
Minimumkövetelményként ajánlást tesz az újraindítás intervallum munkafolyamatok 1 alkalommal naponta.

Igen gyakran sok felhasználó nem ismeri elementarschinu - megnyitásának lehetőségét több munkamenetet dolgozni az adatbázisban, és üljön ki a reggeli, ebéd előtt, várva a újbóli közléséért a negyede vagy a kialakulását egy nehéz jelentés bölcsen nézett tiszta szemmel a monitort.

Ui És szigorúan véve kapcsolatban a leírt probléma a leggyorsabb (a gyakorlatban több tucat, és gyakran több száz alkalommal, attól függően, hogy az adatokat), hogy valami lesz, mint:
UPDATE _Reference53 SET _Fld9204 = _Fld9204 * (együttható) ;-))

Azt hiszem, a szakértők egyetértenek velem van jelen.

Sajnos, az ilyen megközelítések 1C platform nem veszi észre, és komoly problémákat a változás mennyiségű adatot kell kibújik ezen a módon. Time - egy drága erőforrás.

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Egyetértek veled, természetesen közvetlen SQL lekérdezések gyorsabb lenne, az utat is lehet futtatni több szálon, de a probléma az, hogy milyen kell csinálni csakis az 1C.
A fenti módszer szintén nem a legjobb, és az egyik utolsó képzési feladatok lesznek a folyamat optimalizálására.

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Jó napot kívánok. Szervezett többszálú feldolgozás adatainak feldolgozásához a dokumentumot asztalra. Mire optimalizálás egyszerűen óriási. De! Háttér feladat visszatér adatokat vissza. (Lehetséges, hogy valahogy megkerülni? Lehetséges, hogy valamilyen módon megszervezni a visszatérési értékek a háttérben feladat, hogy hagyja a táblázat értékeitől \ vagy több táblát, melyet végül az egyik, és kerülnek a táblázatban a dokumentum?

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Egy kicsit nem meggyőző példa.

Ebben az esetben csak a 8-flow gyorsulás körülbelül 1,38. Ha hatékonyságának mérésére (az arány a gyorsulás folyamok száma), akkor csak 0,17. Mint 80% -át az erőfeszítés fordítottunk költségeket.

Megközelítés, persze, jó. De meg kell választani a feladat, amelynek során az áramlás adatfeldolgozás fog lényegesen több időt, mint a munka fölött. Ezután a szám lesz szebb, és a hatás a kézzelfogható erőfeszítést.

Egy másik alkalommal, amikor lebontják a probléma különálló részek, meg kell, hogy vegye figyelembe az egységes betöltését minden patak. Ellenkező esetben a teljesítmény is repülnek a kéménybe.

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Rájöttem, hogy a kérdésem lenne túllépni a téma téma, de szerintem megfelelő, mivel a feladat része

Vegyük például a feladat: meg kell frissíteni a kellékek „ár” minden eleme a könyvtár „áruk”. Az elemek száma kalauz „Áruk” egyenlő, mint 100.000.

Hogyan javasolni, hogy megszervezze a tranzakciót, és a képesség, hogy „roll” abban az esetben, ha az eljárás hibával tér vissza?

Javíts ki, ha tévedek, de a háttér feladatok végrehajtásának külön ügylet (külön ülés).

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Szia, Eugene!
Ez így van, ebben az esetben, a képesség, hogy „rollback” lehet megszervezni csak egyedül, ez egy olyan fizetési párhuzamosságát.
Itt kell gondolni is, és hogy szükségünk van egy általános rollback, például, hogy nem szükséges ezt a feladatot.
Hiba esetén, akkor egyszerűen újra futtatni a folyamat és a termékek, amelyek ára frissítve csak nem lehet frissíteni.
Más esetekben, akkor jön ki a különböző ellenőrzési mechanizmusok.

„Abban az esetben hiba, akkor egyszerűen újra futtatja a folyamatot és a termékek, amelyek ára frissítve csak nem lehet frissíteni.”
Mi alapján a feldolgozási állapítjuk meg, hogy az ár már frissült?

Gyorsítás 1c többszálú adatfeldolgozás - Project - 1c tanfolyamok

Jó reggelt, Yuri!
Az utóbbi időben azt mondtuk kapcsolatban egy másik probléma, ha szükséges volt, hogy kezelje az áru csak egy bizonyos ár-érték.
valóban szükséges ezt a feladatot, hogy adjunk a jele, hogy az ár már frissült és a frissítés már nem lesz, vagyis transactionality kell tennie magát.

Kapcsolódó cikkek