Kom ihåg mig?
Home Menu

Menu


mySQL - visa icke indexerade frågor

Ämnesverktyg Visningsalternativ
Oläst 2004-11-14, 21:44 #1
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
I MySQL Administrator kan jag se att "Key Effiency" (andelen frågor där indexet används helt och hållet till att få fram resultatet) endast snittar på dryga 70%. Det kan inte vara bra och därför vill jag se just dessa SQL-frågor som inte använder sig av index fullt ut, men hur ska jag göra det? Slow query log kan jag såklar använda, men eftersom MySQL Administrator kan se antalet frågor av den typ så låter det väldigt troligt att man också kan se själva frågorna, och det är i sådana fall bättre än en slow query log.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-11-14, 22:51 #2
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Om du har tillgång till ditt skal kan du enkelt se vilka frågor som körs för tillfället med kommandot:
mysqladmin -u root -p processlist

För att gå vidare, börja med att identifera långsamma frågor genom att tex mäta tiden dom tar att exekvera under normal körning, logga tex alla frågor till en fil inkl exekveringstid (mät innan och efter mysql_query).

Sedan kan du i mysqls konsol använda kommandot "explain" (http://dev.mysql.com/doc/mysql/en/EXPLAIN.html) för att se vilka index en fråga använder. Läs på om explain så kommer du att snabbt och effektivt kunna se vart du kan lägga till ytterligare index.

Grundläget är dock att alla fält som du har med i en WHERE kan indexeras.
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-11-14, 23:26 #3
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Om du har tillgång till ditt skal kan du enkelt se vilka frågor som körs för tillfället med kommandot:
mysqladmin -u root -p processlist
Ger mig ingen nyttig information.

Citat:
För att gå vidare, börja med att identifera långsamma frågor genom att tex mäta tiden dom tar att exekvera under normal körning, logga tex alla frågor till en fil inkl exekveringstid (mät innan och efter mysql_query).
Bättre är ju då att, som jag nämde i mitt förra inlägg, att sätta upp loggningsregler i mysql. T.ex. logga alla frågor som tar mer än 2ms att slutföra.

Citat:
Sedan kan du i mysqls konsol använda kommandot "explain" (http://dev.mysql.com/doc/mysql/en/EXPLAIN.html) för att se vilka index en fråga använder. Läs på om explain så kommer du att snabbt och effektivt kunna se vart du kan lägga till ytterligare index.
Jo, jag känner till det kommandot, men jag tänker inte gå igenom de tiotusentals frågor som körs per timme och kolla vilka frågor som inte är optimerade.

Frågan kvarstår; Jag kan använda mysql slow log, men går det att få fram "rätt" frågor på ett bättre sätt?
kullervo är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-11-14, 23:59 #4
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
grazzy grazzy är inte uppkopplad
Klarade millennium-buggen
 
Reg.datum: Mar 2004
Inlägg: 3 471
Citat:
Sedan kan du i mysqls konsol använda kommandot "explain" (http://dev.mysql.com/doc/mysql/en/EXPLAIN.html) för att se vilka index en fråga använder. Läs på om explain så kommer du att snabbt och effektivt kunna se vart du kan lägga till ytterligare index.
Citat:
Jo, jag känner till det kommandot, men jag tänker inte gå igenom de tiotusentals frågor som körs per timme och kolla vilka frågor som inte är optimerade.
Frågan kvarstår; Jag kan använda mysql slow log, men går det att få fram "rätt" frågor på ett bättre sätt?
Du har knappast tiotusentals unika frågor, såvida du inte har ett webhotell eller liknande? Samla på dig mätdata, plocka ut dom värsta frågorna och börja där?

Det finns inga snabba genvägar till att skapa en effektiv databasmiljö, det handlar om planering. Har man inte gjort det rätt ifrån början så får man bita i det sura äpplet helt enkelt.

Det är möjligt att någon annan vet något som jag inte vet här, men förutom att sitta och manuellt gå igenom alla tabeller och leta efter potentiella foreign keys (vilket jag själv har gjort med egna tabeller) så har jag inga andra tips.
grazzy är inte uppkopplad   Svara med citatSvara med citat
Oläst 2004-11-15, 18:57 #5
kullervos avatar
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2003
Inlägg: 1 519
kullervo kullervo är inte uppkopplad
Bara ett inlägg till!
kullervos avatar
 
Reg.datum: Dec 2003
Inlägg: 1 519
Citat:
Du har knappast tiotusentals unika frågor, såvida du inte har ett webhotell eller liknande?
Nä, nåt webbhotell kör jag inte. Har bara ett fåtal siter på min burk. Totalt sett snittar mysqld på 18 queries per sekund. Räknar man bort de 40% som query cache hanterar så blir det 39000 frågor per timme. Då har jag inte räknat bort updats.

Citat:
Samla på dig mätdata, plocka ut dom värsta frågorna och börja där?
Det var ju därför jag ställde den här frågan från början så jag kan få reda på hur man på bäst sätt får fram "dom värsta frågorna".

Citat:
Det finns inga snabba genvägar till att skapa en effektiv databasmiljö, det handlar om planering. Har man inte gjort det rätt ifrån början så får man bita i det sura äpplet helt enkelt.
Även om alla webbsidorna på min burk vore kodade av mig så att det är jag som ska bita i äpplet, vill jag ändå se vilka tabeller som är bovarna så jag kan rätta till de felen.

Citat:
Det är möjligt att någon annan vet något som jag inte vet här, men förutom att sitta och manuellt gå igenom alla tabeller och leta efter potentiella foreign keys (vilket jag själv har gjort med egna tabeller) så har jag inga andra tips.
Då är ju ändå min idé att logga alla långsamma frågor mycket mycket bättre än att börja kolla på tabellstruktur och gå igenom ett par MB PHP-kod som står och snurrar =)


Tack för att du har försökt hjälpa, men min fråga är mycket enkel och jag har än så länge bara fått svaret "jag vet inte" av dig. Eftersom det är svårt att hitta information om detta på google (har mest hittat liknande frågor i forum utan svar) så antar jag att det inte är möjligt. Ikväll ska jag ta mig tid att börja logga långsama frågor (oj vilken tjat av mig om MySQL slow query log) och kika på resultatet.
kullervo är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 04:20.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017