.net (Ügyeske) hálózati anomália

Sziasztok!

 

Adott egy probléma, amivel lassan 1 éve nem tudunk mit kezdeni kollégákkal. Építő ötleteket, tapasztalatokat kérnék.

Virtualizált környezetben, adott egy Samba-AD, ami file szerver szerepet is betölt. Windows kliensek dolgoznak megosztott meghajtókkal, külön jogokkal.

Adott egy program, nevezzük most Ügyeskének, ami minden kliensre fel van rakva és a file szerveren használ pár adatfile-t, aminek a formátuma SQLite.
Ha ez a file a gépeken a helyi ssd-n van, akkor gyors a program. Amint felkerül a megosztott meghajtóra, akkor látványosan belassul. Ezt produkálja akkor is, ha 1 felhasználó csatlakozik csak rá.

Amiket már próbáltam:
- jogosultságok variálása (local admin, domain admin)
- samba hangolás (lock-olás, debug, stb...)
- kliens csere (gép és tiszta windows)
- switch csere
- szerver bővítés (ssd-ről nvme-re, 1Gb-ről 10Gb-re)
- ha ebbe a virtualizált környezetbe felrakok még egy Windowst, amit bridge-ben összefogok az AD-val, akkor sem történik gyorsulás. Ha kimásolom ott is a helyi meghajtóra, akkor működik.

 

Minden más, ami a hálózaton van rendesen működik.

Ügyeske .net-ben van írva (elvileg), .net framework 4.0.30319 használ.

 

Több ismerőst kérdeztem már Ügyeskével kapcsolatban, de mindenhol hasonló a probléma.

A fejlesztő tanácsolta, hogy "NAS-on jól működik", de sajnos nem. (Igaz azzal az informatikussal, akivel teszteltette minden rendben volt. Összedugta a NAS-t a géppel egy az egyben és akkor elvileg gyors volt....)

Ami "megoldás" eddig van: Windows RDS és a program a helyi meghajtón van.

 

Ki merre indulna el?

Hozzászólások

Szerkesztve: 2021. 04. 05., h – 17:17

SQLite egy egyfelhasználós adatbázis "kezelgető" engine. Szerencse hogy megy megosztott meghajtón, azaz legalább a file lockolás le van kezelve. Ami hiányzik belőle ahhoz, hogy több párhuzamos felhasználó hálózaton keresztül valóban használni tudja: párhuzamosság, dedikált memória cache, több fájl használata, stb. Azaz minden amiről az adatbázisrendszerek tervezése könyvben 20 éve írtak.

Ezen SSD sem fog segíteni, amikortól több "rekordot" (mondjuk 1-2000-nél többet) elkezd index nélkül pisztergálni, pláne hálózaton megvalósítva az fseek műveletet, meg fog halni. Megy, de annyira lassú... Helyi megoldásként fog menni, RDP lesz a barátod. Szerintem.

"Amint felkerül a megosztott meghajtóra, akkor látványosan belassul": mondasz egy lokális és egy hálózati tipikus időt? Mondjuk Ügyeske login vagy a legfontosabb lista lekérése mp-ben.

"Amint felkerül a megosztott meghajtóra, akkor látványosan belassul": mondasz egy lokális és egy hálózati tipikus időt? Mondjuk Ügyeske login vagy a legfontosabb lista lekérése mp-ben.

Ami lokális gépen folyamatos működésnek mondható (<1 mp), az hálózaton 2-5 mp. Van amikor egy menübe való belépés is több másodperc...
Ami furcsa, hogy olyankor a Windows is csak "teker" (program nem válaszol). Windows 7-nél még .net 2-es verzióval még nem volt ennyire lassú. Windows 10-nél egyre lassabb. Volt amikor az volt a válasz Ügyeske szüleitől, hogy xy Windows frissítés (ami fent sem volt a gépen) okozza.

 

Helyi megoldásként fog menni, RDP lesz a barátod.

Nekem nincs már ötletem, és lassan már energiám se kínlódni.

Ügyviteli, konyvelo rendszernel elvben mukodik, gyakorlatban evi 240 napbol lesz 3-15 olyan, amikor elfelejtik es akkor odavesz vagy kesik a mar felrogzitett adat. Oka lehet hogy gyorsan lecsukja a nofebookot es hazaszalad vele. Tudom policy, de ezeknel a cegeknel meg irodariaszto es porolto sincs, nem hogy it policy. 

Hát, ha sambával nem működik, akkor betenném a fájlt valami verziókövető rendszerbe, és megtanítanám az embereket, hogy lock+checkout után lehet a lokális gépen módosítani, commit után meg élnek a változások és valaki más jöhet.

Valami olyasmi rendszert keresnék, amiben mindezt egy webes felületen meg tudják csinálni a népek.

Ha valaki épp elfelejti, majd a következő (aki látja, hogy lockolt és ki által) odaszól neki, hogy fejezze már be, mert mások is dolgoznának ám.

Így meg van oldva a helyi másolat (elvárt sebesség) és a konzisztencia.

disclaimer: ha valamit beidéztem és alá írtam valamit, akkor a válaszom a beidézett szövegre vonatkozik és nem mindenféle más, random dolgokra.

Te ezt komolyan működőképesnek gondolod? :D

Persze. Sokan dolgoznak pl. MS Sharepointtal, pont így, ahogy leírtam. Akár könyvelők is.

disclaimer: ha valamit beidéztem és alá írtam valamit, akkor a válaszom a beidézett szövegre vonatkozik és nem mindenféle más, random dolgokra.

Ha meg tényleg egy gép/egy user és csak a mentéssel van a gond, akkor tedd a kliensre és kapcsold be a file history-t és irányitsd a nas-ra. Pont ugyanolyan mentés lesz róla (csak, ha változik a file), mintha a nas-on mentenél és ha inkonzisztens az adatbázis, miközben nyitva van a program - amit kétlek - akkor igy is, úgyis inkonzisztens. Ha a laptop lecsukás a gond, akkor is ugyanaz lesz a végeredmény, ha ilyenkor inkonzisztensen hagyja, akkor az is maradna a nas-on mentve is.

De nem hinném, hogy egy sqlite-nál ilyen előfordulna.

Van egy közös adatbázis, amiben minden ügyfél alapadata szerepel. Ezen kívül ügyfelenként van 1 db file (számlázó,bér,egyszeres, kettős, deviza könyvelésre) cégazonosítóÉVSZÁM formátumban. Ha a program le tudná kezelni, hogy addig ne tudja más használni azt az adatbázist, akkor ez lenne a legjobb megoldás (adatbázis szerver nélkül). De így egymásra is tudnak könyvelni...

+1

Mielőtt nagyon szidnánk az adatbáziskezelőt - melynek azért meg van a saját helye, és ott igencsak sikeres - érdemes elolvasni az alábbi irományt: Appropriate Uses For SQLite, főleg a checklist részét.

Tudom: ami kerek, azt cipeljük; ami meg szögletes, azt meg gurítjuk. Aztán meg csodálkozunk, hogy nem vagyunk hatékonyak.

Az más kérdés, hogy a fejlesztő mennyiért készít az egyfelhasználós, egyszerű kis programjából egy többfelhasználós, kliens-szerver architektúrájú szoftvert. Lehetőleg ingyen, mert a kibicnek semmi sem drága.  

Update - most látom, hogy már más is belinkelte.

AL

Ha SQLite mellett maradtok:

1. A fejlesztőnek kutya kötelessége remote setupban is tesztelni a programját, kb hasonló felállásban (tényleg remote kliens-szerver és nem virtualizált teszt környezet).

1.a. Ha ott jó, akkor addig közelítse a setupot (hardver, konfig(!!!)) a tiedhez, amíg elő nem jön a probléma, akkor goto 2.

1.b. Ha ott már nem jó, akkor goto 2.

 

2. Próbálkozni kell SQLite adatbázis szinkronizációs beállításokkal.

-  A fejlesztő adjon kapcsolókat, amivel az SQLite synchronous, ill journal_mode flagjeit tetszés szerint állíthatjátok, végigpróbálva az összes kombinációt.
Tippem: nem használnak WAL-t, vagy azt szuboptimálisan használják, és minden DB írást követ egy fájl rendszer flush + szinkronizálás, ez networkön iszonyat lassú tud lenni.
Bizonyos kombinációk élesben persze tilosak, mert adatvesztést okozhatnak, de a probléma azonosításában segíthetnek.

3. Ha 2. nem hozott eredményt, akkor átírás.

* rqlite? ez elvileg replikálja a változásokat más db-kbe (nem használtam)
* más DB, sajna ez keményebb dió.

Nem ismerem a programot, de akár jogos is lehet a fejlesztő észrevétele. Ő egy egygépes megoldást csinált ahol a DB ott van ahol az alkalmazás.

Az ügyfélbázisának 99.999%-ának ez így jó. Van 1-2 problémás ügyfél, akinek ez nem felel meg. Neki meg nem éri meg átírni, tesztelni, stb.

Megoldás: vagy használja az ügyfél úgy, ahogy kellene, vagy vált másik termékre.

Hat nem tom, en sem ismerem, viszont az OP azt irta, hogy ez igy tesztelve lett a gyarto altal es ott jol megy. A fejleszto meg azzal takarozik, hogy az o rendszereben van a hiba. Akkor gondolom nem ok hackeltek ossze, hanem ez egy tamogatott feature volt.

De amugy nem eri meg valoszinuleg ezzel vacakolni van n+1 masik ilyen program.

Kapcsolókat kivezetni a fejlesztő részéről minimális erőfeszítés.

Ha erre sem hajlandó, akkor ez nem egy jóindulatú fejlesztő, hanem amolyan k-európai "örüjjé hogy döcög vazzeg és tejejjé".
Na ilyenkr ezt hagyni kell a fenébe, és más termékre váltani.

Amikor majd a személete miatt Tesco árufeltöltő lesz a fejlesztőből, akkor rájön, hogy mindig a vevőnek van igaza.

Azt kell megérteni, hogy a szoftverfejlesztő cégek oldaláról mindig van egy erőforrás limitáció. Éppen ezért minden esetben, amikor akár hibajavítás, akár új feature fejlesztése történik, kell(ene) lennie egy felmérésnek, amely az adott fejlesztés mellé odarakja annak a költségét. Ha a várható haszon nagyobb mint a fejlesztés költsége (beleértve az új feature fejlesztése esetén a növekvő bevételeket, vagy hibajavítások esetén az ügyfél elégedettség miatti csökkenő ügyfélszám lemorzsolódást) akkor ez meg lesz csinálva. Ha nem, akkor pedig nem.

Azt kell megérteni, hogy nem minden ügyfél egyformán fontos. Az ügyfél fontossága pedig jórészt a belőle kinyerhető összeggel arányos.

Ezt egyébként több módon is meg lehet oldani: lehet például support szerződést kötni, és akkor a beadott hibajavítások előre lesznek véve. Vagy lehet egyedileg szerződni. Vagy fel lehet mondani a szerződést, és átmenni másik céghez. Vagy pedig megoldani valahogy trükközve házon belül. Ezek mind teljesen valid megoldások.
 

Teljesen jogos és érthető, a szoftver fejlesztőt is illik emberszámba venni.

De.

Ha ez egy több fős cég, több géppel és az elején ezt leírja egy levélben, hogy Neki ez a fejlesztés nem éri meg, akkor szerintem senki nem akasztaná fel.

A könyvelő cég is tudatában lenne, hogy ha ezt a programot akarja használni akkor mik a szükséges feltételek. Felesleges köröket verni az ügyfél és az üzemeltető agyába nem szép dolog.

Pláne azért mert egy idő után elfogy a türelem mindhárom oldalon.

Nézd, én mióta letettem a csörgőt azóta szoftvert fejlesztek, szóval ismerem ezt az oldalt, saját vállalkozásban is toltam évekig.

Sokat lehet itt rizsálni, de a lényeg: kis példányszámnál ez inkább egy szolgáltatás, ahol kinyalod a vevő fenekét, nem egy termék, amit a Tescoban gondolába ömlesztesz.
Ha a fő érvet, ami miatt téged választanánk, kiütöd, akkor meg fogsz bukni.

azt gondolom, hogy ez egy fejlettséget mutat. Van a zugfejlesztő kategória, amelyiknek van 1-2-10 ügyfele, és azoknak mindig mindent is megcsinál. Aztán van egy olyan

méret, amikor már több 100, több 1000 ügyfél van, ott ez a zugfejlesztő/garázscég mentalitás már nem működik.

Egy hálózat forgalmat esetleg még lehet nézni (wireshark) hogy hátha ott látszik valami...

"Összedugta a NAS-t a géppel egy az egyben és akkor elvileg gyors volt....)" ezen még mindig pislogok.

sőőőőt :D

Szerkesztve: 2021. 04. 06., k – 18:40

SMB 3 engedélyezve van a samba-n? Ég és föld a különbség véletlen elérésben.

De megnézném w10-es "szerver"-rel is, mert a samba smb implenteciója hagy némi kivánnivalót maga után.

Mivan ha iSCSI csatolod a szerverről akkor is "távoli" meghajtónak érzékeli és lassú lesz?

Én a Windows offline file lehetőség felé nézegetnék. A lenti linken tárgyalják, hogyan lehet jó beállítani, "slow link mode", "automatically cache files = on". Ekkor az írás és olvasás helyileg történik és kb. 2 percenként szinkronizál.

https://superuser.com/questions/235257/local-cache-for-nas-or-network-f…

Elvileg Samba-val is megy.

https://techcommunity.microsoft.com/t5/storage-at-microsoft/using-offli…

Van egy kozos.db. Ebben vannak benne a cégek alapadatai + még egyéb program információk. Ehhez minden kliens hozzányúl "folyamatosan".

CegaznositoEVSZAM.db -ben pedig a számlázási, könyvelési, stb adatok. Ezt elvileg csak az használja, aki ennek a cégnek a dolgait kezeli.

Az en nyakamon is maradt egy .Net hulladek. Aminel en kikotottem: virtual desktop.

Meg kene nezni, hatha elketyeg wine alatt, mert akkor a lehetosegek tarhaza nyilik ki. Csak mivel konyveloprogramoknal szokott jonni frissites, igy allando es folyamatos szivasnak nezel elebe.

 

Van olyan problema amit tudni kell elengedni. Szembeszellel (leszari fejleszto) nem erdemes pisalni.

Foleg, ha meg is sikerul csinalnod (most), majd egy ev mulva valamit allitgat a tisztelt fejleszto, es ujra lassu lesz, es akkor majd megy az ujjal mutogatas rad, hogy te nem ertesz hozza.

 

Magad alatt vagod a fat. Hazhoz mesz a lof*szert. Komolyan.

Saying a programming language is good because it works on all platforms is like saying anal sex is good because it works on all genders....

Szerintem itt a vége a történetnek:

  • High Concurrency

    SQLite supports an unlimited number of simultaneous readers, but it will only allow one writer at any instant in time. For many situations, this is not a problem. Writers queue up. Each application does its database work quickly and moves on, and no lock lasts for more than a few dozen milliseconds. But there are some applications that require more concurrency, and those applications may need to seek a different solution

https://sqlite.org/whentouse.html

Click-click módon megírt alkalmazás, csilliónyi tök felesleges írással akár a menü nyitogatásakor és már ott is vagyunk amit tüneteket leírsz.

Ezen semmilyen samba tuning nem segít. Ha normálisan lenne megírva az app (ezen a szinten nem hiszem) akkor egy adatbázis cserével megoldható lenne a történet.

Gábriel Ákos

Szerintem inkább ez a vége. :)

Checklist For Choosing The Right Database Engine

  1. Is the data separated from the application by a network? → choose client/server

    Relational database engines act as bandwidth-reducing data filters. So it is best to keep the database engine and the data on the same physical device so that the high-bandwidth engine-to-disk link does not have to traverse the network, only the lower-bandwidth application-to-engine link.

    But SQLite is built into the application. So if the data is on a separate device from the application, it is required that the higher bandwidth engine-to-disk link be across the network. This works, but it is suboptimal. Hence, it is usually better to select a client/server database engine when the data is on a separate device from the application.

    Nota Bene: In this rule, "application" means the code that issues SQL statements. If the "application" is an application server and if the content resides on the same physical machine as the application server, then SQLite might still be appropriate even though the end user is another network hop away.

https://sqlite.org/whentouse.html

Az utolsó bekezdésben említettek alapján a kérdező által írt RDS megoldás a problémára.

+1

Még idézetek ugyaninnen:

Situations Where A Client/Server RDBMS May Work Better

Client/Server Applications

If there are many client programs sending SQL to the same database over a network, then use a client/server database engine instead of SQLite. SQLite will work over a network filesystem, but because of the latency associated with most network filesystems, performance will not be great. 

Is the data separated from the application by a network? → choose client/server

 

Itt nagyjából csak az segíthet gyorsan, ha konkrét SQL utasítások helyett valamilyen ORM réteget használnak a programon belül (pl.: Entity Framework), ahol a provider elrejti a konkrét adatbázis implementációt, és nagyjából egy konfig módosítással át lehet térni egy másik, kliens/szerver alapú adatbázis-kezelőre SQLite helyett.