Avatar billede dsj Nybegynder
05. januar 2004 - 20:10 Der er 18 kommentarer og
1 løsning

Har alle DBMS'er det samme problem som MySQL

Jeg har en MySQL 4 et-eller-andet kørende som DBMS for en del applikationer, mest web. En af applikationerne er dårligt kodet og kører ind imellem nogle nasty SELECT-statements med nogle nasty joins. Dette gør MySQL (kompileret til at anvende flere CPU'er) og dermed maskinen den kører på (dedikered maskine med dual CPU og 2 GB ram) bliver fuldstændig overbelastet, så belastet at de resten applikationer ikke får svar i 30-60 minutter.

Det jeg vil høre om er, om det blot er MySQL eller de andre kendte DBMS'er (PostgreSQL, DB2, Oracle, Interbase, MsSQL) også lider af det problem, at en enkelt applikation (én forbindelse) kan lægge beslag på alle ressourcer i så lang tid?

Problemet ligger vidst i at de joins der udføres er ret omfattende og at MySQL opretter en midlertidig tabel for at udføre de ønskede joins. Mens forespørgslen er under udførelse låses alle anvendte tabeller.
Ret mig endelig, hvis denne opfattelse er forkert. Hvis det er rigtigt, gør de andre DBMS'er også sådan, eller har de en smartere måde. Her er jeg godt klar over, at de fleste andre kan finde ud af at låse på række-niveau i stedet for på tabel-niveau.
Avatar billede erikjacobsen Ekspert
05. januar 2004 - 20:12 #1
Jeg vil nu gætte på dårligt databasedesign. Men det er selvfølgelig
nemt nok at sige, når jeg ikke ved noget om din applikation ;)
Avatar billede lap Nybegynder
05. januar 2004 - 20:14 #2
Hvis det er en ren select, så burde det slet ikke give nogen låse. Som regel vil permance gå ned på maskinen, men hvis en select skal køre så længe, så er der alvorlige problemer.

Jeg kender mest til Oracle, og som regel kan det løses - en omskrivning er selvfølgelig optimal, men alene trimning af maskineri og oracle kan løse meget.
Avatar billede dsj Nybegynder
05. januar 2004 - 20:15 #3
Det er som nævnt ikke smartest lavet, men i hvert fald er der indekser på alle kolonner der anvendes til joins.

Men kan andre DBMS'er finde ud af nogen lunde at fordele ressourcerne, så ikke en applikation får lov at lægge alt ned?
Avatar billede arne_v Ekspert
05. januar 2004 - 20:17 #4
Altså - ikks-MySQL processer burde køre fint - ellers er det en fejl i
operativ systemets schedulerings algoritme.

Alle database kan have problemer med låsninger der staller andre
connections.

30-60 minutter lyder helt vildt - må være underdimensioneret server.

Row level locking er hurtigere end page level locking som er hurtigere
end table level locking.

Men det er ikke nok til at bringe 30-60 minutter ned på acceptabelt
niveau.

Medmindre database struktur eller query er uhensigtsmæssigt, så
er hardwaren underdimensioneret til opgaven.
Avatar billede dsj Nybegynder
05. januar 2004 - 20:23 #5
Serveren skulle ikke være underdimensioneret, den kører Debian og MySQL svarer overhovedet ikke andre applikationer når problemet opstår, andre processer svarer næsten ikke. F.eks. tager det flere minutter at logge på med SSH.

De forskellige applikationer kører forskellige databaser og skulle derfor ikke låse ting for hinanden, med mindre MySQL laver et eller andet smart i baggrunden. Og jo, det er en query der skaber problemet. Det jeg bare godt vil vide er, om andre database ville gøre det bedre, således at en enkelt database-forbindelse kan lægge beslag på alle DBMS'ens ressourcer. Jeg ved godt hvordan tingene bør laves, men lige nu er det som det er.
Avatar billede arne_v Ekspert
05. januar 2004 - 20:47 #6
At andre ikke-database processer hænger er ikke acceptabelt. Enten har
den Debian en fejl i scheduleringen eller så har MySQL fået hævet
sin prioritet.

Hvis det er samtdige database operationer, så er der principielt
mulighed for konflikter p.g.a. låsninger.

Men du siger at de ikke opererer på samme data ????

Mystisk !

Kan det være mangel på memory således at der bruges roterende memory ?

Kan det være temporære tabeller der er flaskehalsen ?

Indtil problemet er specifikt identificeret er det meget svært at sige
om en anden database vil håndtere det bedre.
Avatar billede dsj Nybegynder
05. januar 2004 - 20:59 #7
Det kan meget vel være temporære tabeller der er problemet, det problem har jeg nemlig haft før med en anden applikation. Udfører andre DBMS'er også joins ved brug temporære tabeller?
Avatar billede arne_v Ekspert
05. januar 2004 - 22:00 #8
Hvad mener du med temporære tabeller.

Når jeg hører MySQL og temporær tabel tænker jeg på:

http://www.mysql.com/doc/en/CREATE_TABLE.html

From MySQL Version 3.23, you can use the TEMPORARY keyword when you create a table. The temporary table is visible only to the current connection, and will be deleted automatically when the connection is closed.

Den feature er i de fleste databaser.

Men jeg formoder at du tænker på:

http://www.mysql.com/doc/en/Temporary_files.html

For some SELECT queries, MySQL also creates temporary SQL tables. These are not hidden and have names of the form `SQL_*'.

Det er usædvaneligt. De fleste databaser forøsger at køre den slags
i memory (evt. med paging til disk hvis ikke RAM nok).

Der er en grund til at database producenter interesserede sig for
64 bit computere allerede midt i 90'erne !
Avatar billede dsj Nybegynder
05. januar 2004 - 22:04 #9
Avatar billede arne_v Ekspert
05. januar 2004 - 22:11 #10
Bruger du MySQL eller SAP DB ?

(MySQL MAX DB er et nyt navn for SAP DB efter at SAP DB er overgået
til firmaet MySQL)
Avatar billede dsj Nybegynder
05. januar 2004 - 22:12 #11
Den regulære MySQL...
Avatar billede arne_v Ekspert
05. januar 2004 - 22:16 #12
Så er den side ikke relevant.

Men altså enhver join vil selvfølgelig producere en form for temporær tabel.

Det interessante er om den ryger på disk eller ej.

Hvis du læser det link jeg angav så kan MySQL (den normale) tilsyneladende
find epå at smide dem på disk.
Avatar billede dsj Nybegynder
05. januar 2004 - 22:22 #13
Det med temporære tabeller er ikke noget jeg decideret har læst, men hørt. Men ja, så vil en anden DBMS vel kunne klare det bedre. PostgreSQL skulle også være hurtigere til det krævende arbejde. Jeg har desuden hørt skarp kritik af MySQL's skaleringsevne.
Avatar billede arne_v Ekspert
05. januar 2004 - 22:32 #14
Generelt er det mit indtryk at MySQL skalerer udmærket i single server single CPU
konfigurationer.

Hvis MySQL skalerede fremragende på cluster af 24 CPU systemer, så ville
priserne på Oracle og DB2 jo nok ikke være som de er.

Fra hvad jeg hører så er PostgreSQL i forhold til MySQL som
FreeBSD i forhold til Linux.
Avatar billede dsj Nybegynder
05. januar 2004 - 23:15 #15
Jeg ved ikke hvad FreeBSD er i forhold til Linux, gider du uddybe :)
Avatar billede arne_v Ekspert
05. januar 2004 - 23:29 #16
Linux er kendt af gud og hver mand.

Mange feinschmeckere foretrækker FreeBSD fremfor Linux, men er totalt
ukendt uden for en snæver kreds.
Avatar billede trer Nybegynder
06. januar 2004 - 09:06 #17
Spm er godt nok lukket, men...

Har du mulighed for at slå parallelisme fra på queries, så gør det. Query parallelisme giver ofte problemer pga synkronisering indenfor de enkelte dele af querien både på MS SQL og Oracle.

En anden ting, check om du kan omskrive din query så den er simplere - jeg kender ikke MySQLs parser og query rewriter i detaljer, men bestemte formuleringer performer typisk dårligere end andre. 

Fx er IN () statements typisk langsommere end EXISTS() pga implicit sortering, OR statements (og alle ikke-determitistiske funktioner) forhindrer brugen af indeks etc.
Avatar billede dsj Nybegynder
06. januar 2004 - 09:45 #18
Query parallelisme  >> er det noget du har noget dokumentation på et eller andet sted på nettet evt.? Som nævnt kører maskinen dual CPU, så er det ikke helt rigtigt, risikerer jeg at sænke performance ved at slå det fra.
Avatar billede trer Nybegynder
06. januar 2004 - 17:11 #19
At disable Query parallelisme forhindrer ikke udnyttelse af flere cpu'er - det gør blot at den enkelte query kun kører på en cpu adgangen.

Mht links; Du vil kunne finde adskillige referencer til problemer i forb. det på Metalinks (Oracle) og Microsofts supportsider. Spørgsmålet er, om de er generelt tilgængelige...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester