Avatar billede jacand Nybegynder
30. maj 2006 - 16:13 Der er 13 kommentarer

Højt cpu load

Jeg har nedenstående server (win2003) der køre web og Mysql, men så snart der kommer en smule brugere på den ligger cpu load sig på 100% og der bliver den faktisk konstant. (det er mysql der bruger det hele)
Er der en der kan give mig nogle råd til hvordan man får den ned?


Server 2 x 2,8 Ghz Xeon, 2 GB RAM, 2 x 146GB 10,000 U320 SCSI hard drive raid 1 (128MB Cache) 

my.ini

[mysqld]
port=3306
basedir="C:/MySQL/"
datadir="C:/MySQL/Data/"
default-character-set=latin1
default-storage-engine=INNODB
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
max_connections=800
query_cache_size=32M
table_cache=256
tmp_table_size=103M
thread_cache_size=8

#*** MyISAM Specific options
myisam_max_sort_file_size=100G
myisam_max_extra_sort_file_size=100G
myisam_sort_buffer_size=205M
key_buffer_size=128M
read_buffer_size=1M
read_rnd_buffer_size=512k
sort_buffer_size=1M


#*** INNODB Specific options ***

innodb_data_home_dir = C:\MySQL\InnoDB_data
innodb_data_file_path = ibdata1:250M:autoextend
innodb_log_group_home_dir = C:\MySQL\InnoDB_log
innodb_log_arch_dir = C:\MySQL\InnoDB_log
innodb_lock_wait_timeout = 50
innodb_additional_mem_pool_size=24M
innodb_flush_log_at_trx_commit=0
innodb_log_buffer_size=8M
innodb_buffer_pool_size=250M
innodb_log_file_size=500M
innodb_thread_concurrency=10
innodb_file_per_table
memlock
low-priority-updates
Avatar billede -mundi- Nybegynder
30. maj 2006 - 16:53 #1
optimer sql statements, sørg for index på de mest brugte felter. Plejer at være et godt sted at starte
Avatar billede jacand Nybegynder
30. maj 2006 - 18:28 #2
Jeg har optimeret mine sql statements og jeg har index på alle felter som bliver brugt i mine where X = Y.
Avatar billede arne_v Ekspert
31. maj 2006 - 01:52 #3
manglende index burde også give sig udslag i heftig IO og ikke heftig CPU

nogen store sorteringer, LIKE på lange tekst strenge, heftige funktions udtryk ?
Avatar billede jacand Nybegynder
31. maj 2006 - 10:16 #4
Ja jeg har en del order by og ingen LIKE.
Ellers er det kun normale select, insert og update ikke noget stort.
Kan det være fordi der er for mange felter der er index på og det er når den laver update insert at den har for mange index den skal opdatere.
Jeg har søgt efter en løsning men alle steder er det I/O og ikke CPU load der er problemet :-)
Avatar billede arne_v Ekspert
01. juni 2006 - 03:06 #5
indexer som skal opdateres bure også give IO load ikke CPU load

er der nogen bestemte sider med nogle bestemte SQL sætninger som er
specielt langsomme ?

dine ORDER BY hvormange rækker sorterer du ?
Avatar billede jacand Nybegynder
01. juni 2006 - 14:58 #6
Nej det er ikke bestemte sider, problemet kommer når den kommer over 30-40 connections.
Jeg sorterer en række dog max 2 i nogle få order by.
Avatar billede arne_v Ekspert
02. juni 2006 - 02:59 #7
1 række ? du mener 1 kolonne ikke ? hvor mange rækker ?
Avatar billede jacand Nybegynder
03. juni 2006 - 13:24 #8
Ups :-)
Det ligger mellem 50 - 100.000 rækker.
Avatar billede arne_v Ekspert
04. juni 2006 - 01:01 #9
se det kunne jo være en mulig forklaring

for at kunne sige noget mere præcist skal vi nok se:
  - tabelstruktur
  - eksempel på query
  - EXPLAIN på query
Avatar billede jacand Nybegynder
08. juni 2006 - 18:45 #10
explain SELECT dato,tekst,udgift,belob FROM kontooversigt Where brugernr = '"1023' and dato = '2006-06-08' ORDER BY id

1, 'SIMPLE', 'kontooversigt', 'ref', 'brugernr,dato', 'brugernr', '53', 'const', 1, 'Using where; Using filesort'

Tabel:
  `id` int(11) NOT NULL auto_increment,
  `dagopdate` tinyint(4) default '0',
  `flyttet` tinyint(4) default '0',
  `brugernr` varchar(50) default NULL,
  `tekst` varchar(255) default NULL,
  `dato` datetime default '0000-00-00 00:00:00',
  `belob` decimal(19,4) default NULL,
  `indtaegt` tinyint(4) default '0',
  `udgift` tinyint(4) default '0',
  `backup` tinyint(3) unsigned default '0',
  `tilbagefort` tinyint(3) unsigned default '0',
  PRIMARY KEY  (`id`),
  KEY `dagopdate` USING BTREE (`dagopdate`),
  KEY `brugernr` USING BTREE (`brugernr`),
  KEY `dato` USING BTREE (`dato`),
  KEY `backup` (`backup`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
Avatar billede jacand Nybegynder
09. juni 2006 - 10:31 #11
Jeg tror jeg har funde fejlen selv :-)
Det ser ud til at være et index problem, jeg havde en opdatering der tog 3 minutter at køre, jeg lavede nogle explain på de select jeg havde i den, og MYSQL brugte først index hvis jeg satte /'/ i mit select.
eks.
Select belob from kontooversigt where brugernr = 200 order by dato --> ct belob from kontooversigt where brugernr = '200' order by dato
Nu tagen det 6 sec. at køre opdateringen uden at cpu'en er belastet.

Så jeg må igang med at tjekke mine koder og index får det er vist her problemet er.

Tak for hjælpen.

Et lille spørgsmål.
Hvad er den bedste opsætning af my.ini på min server med 4 GB ram?
Jeg vil gerne over og køre INNODB på min DB.
Avatar billede -mundi- Nybegynder
09. juni 2006 - 10:34 #12
er brugernr et tal eller tekstfelt ?
Avatar billede jacand Nybegynder
09. juni 2006 - 11:21 #13
`brugernr` varchar(50) default NULL,
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