processo MySQL utilizza utilizzo della CPU superiore al 100% e bisogno di circa 1 GB di memoria

StackOverflow https://stackoverflow.com/questions/1692756

Domanda

Sono in esecuzione server MySQL sul server del che ha le seguenti specifiche -

Dual Xeon Quad Core 2.0, 2048 MB di RAM, 160 GB SATA 1x Fedora Core + SSH

Ma processo di MySQL per l'inserimento di 10000 record prendere più del 100% di CPU e fino a 1 GB di RAM. Si tratta di un'istruzione di inserimento pianura.

Perché MySQL sta prendendo tanto di memoria e che cosa può fare a riguardo?.

È stato utile?

Soluzione

La parte più pesante nella query è SELECT:

Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer
Where UserID Between 1 and 5000
and CustomerID in (Select CustId from Cust_Details Where CustName like 'Mi%')

La query nidificate probabilmente viene ripetuta per ogni riga. È possibile controllare questo EXPLAIN PLAN esecuzione + tutte le query SELECT. Credo che l'operatore 'come' viene usato contro una colonna non indicizzata. In questo caso (like 'xyz%') un indice semplice può migliorare le prestazioni molto.

[Aggiunto: inoltre, SELEZIONA CustId ... mosto di che sono maggiori di 5000, che non sono necessari a tutti id uscita. Un indice composito (CustId, CustName) su Cust_Details deve anche essere utile.]

Prova usign un join invece:

Select FirstName, LastName, CountryID, Address, Phone
From Test2.Customer c, Cust_Details cd
Where c.UserID Between 1 and 5000
and c.CustomerID=cd.CustId
and left(cd.CustName) = 'Mi'
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top