ohmygod Posted December 13, 2006 Report Share Posted December 13, 2006 Iepriekš viena topikā mani rāja par sliktiem algoritmiem un sliktu db struktūru. Lai arī būtībā ne vienu, ne otru neviens nav redzējis. Bet nu bremze ir! Loģikā e.t.c. vaina nav. Logoju visas darbības ar laikiem un bez mysq inserta viss notiek man apmierinošā ātrumā. Vismaz reizes 8-10 ātrāk. http://php.lv/f/index.php?showtopic=6109 Inserts notiek tabulā ar struktūru: CREATE TABLE `tabula` ( `id` int(11) NOT NULL auto_increment, `name` varchar(255) default NULL, `price` decimal(10,2) NOT NULL default '0.00', `param_1` varchar(255) default NULL, `param_2` varchar(255) default NULL, `group_id` decimal(6,0) NOT NULL default '0', `time` datetime NOT NULL default '0000-00-00 00:00:00', KEY `id` (`id`) ) ENGINE=InnoDB; Tieši visparastākais inserts šādā tabulā ir ļoooti lēns. Iepriekš šinī tabulā notiekās searchs ar LIKE '%seg1%seg2%seg3%' un tas notiek mani pilnībā apmierinošā laikā. Kas te varētu būt insertu bremzējošs? Link to comment Share on other sites More sharing options...
v3rb0 Posted December 13, 2006 Report Share Posted December 13, 2006 (edited) indexi var bremzēt insertus. edit vispārīgi http://en.wikipedia.org/wiki/Index_%28database%29 mysqlam jāskatās kāds no šiem http://dev.mysql.com/doc/mysql/search.php?...c=1-5.0&m=o ja tiešām nav neviens cits index bez primārās atslēgas, tad varbūt tas selects bremzē. palaid arī visus repair/optimize table, par skādi jau nenāks. Edited December 13, 2006 by v3rb0 Link to comment Share on other sites More sharing options...
ohmygod Posted December 13, 2006 Author Report Share Posted December 13, 2006 e? Link to comment Share on other sites More sharing options...
Grey_Wolf Posted December 13, 2006 Report Share Posted December 13, 2006 Kas te varētu būt insertu bremzējošs? default NULL ??? teoretiski NULL stipri samazina sql izpildes laiku... + kada velna peec shis? `group_id` decimal(6,0) NOT NULL default '0', kaapeec ne INT( 6 ) ??? vai vienkarshi pat MEDIUMINT paskaties pats seit + nevis KEY `id` (`id`) bet PRIMARY KEY (`id`) jo Mysql nevar normaali noindekseet .... peec tam taas vertibas ko mekleesi (grupas) arii noindeksee KEY `group_id` (`group_id`)...... Link to comment Share on other sites More sharing options...
ohmygod Posted December 13, 2006 Author Report Share Posted December 13, 2006 (edited) Ok, uzliku primary index. un decimal(6,0) vietā int. Pilnīgi nekas nemainījās. Un līdz šim domāju, ka indexi tīri meklēšanu paātrina. Nesaprotu, kā viņu neesamība varētu palēnināt INSERTu! Tad jau drīzāk esamībai vajadzētu palēnināt insertus. Pie Update varbūt bez indexiem varētu nedaudz iebremzē... bet kam viņi pie inserta? Edited December 13, 2006 by ohmygod Link to comment Share on other sites More sharing options...
Roze Posted December 13, 2006 Report Share Posted December 13, 2006 Tieši visparastākais inserts šādā tabulā ir ļoooti lēns. Uz kāda dzelža (parametri) stāv konkrētais MySQLs? MySQL versija? Cik liela (ieraksti tabulā) ir konkrētā tabula? Cik lieli (ja nav file per table) ir ibdata faili? Kas notiek ja tabulu pārkonvertē (vai uztaisa ar analogu struktūru) MyISAM? Cik tad ātri notiek inserts? Jo MySQLam uz šadus simple kverijus vajadzētu izpildīt 10 000 sekundē un vairāk.. Link to comment Share on other sites More sharing options...
bubu Posted December 13, 2006 Report Share Posted December 13, 2006 Nesaprotu, kā viņu neesamība varētu palēnināt INSERTu! Tad jau drīzāk esamībai vajadzētu palēnināt insertus. Indeksu neesamība pāatrina indeksus, nevis palēlina. Tb nav indeksa - ātrāks inserts. Ir indekss - lēnāks inserts. Pie Update varbūt bez indexiem varētu nedaudz iebremzē... bet kam viņi pie inserta? A tu zini, kas vispār ir indekss? Tb kā tas ir realizēts datubāzēs? Vispārīgā gadījumā tā ir papildus datu struktūra - vai nu sakārtots binārs koks, vai kāda hešmape. Vai tu zini, kas ir sakārtots binārs koks? Un vai tu zini, kas ar to koku notiek, kad tajā mēģina ielikt/izmainīt/izdzēst vienu virsotni? Tas viss koks ir jāpārkārto. Protams, datubāzes savus indeksus neglabā primitīvos sakārtotos kokos, tās parasti izmanto advancētākus kokus B-tree, B+tree, utt. Taču vienalga, šie koki ir vairāk vai mazāk jāpārkārto, kad tu izmaini atslēgas saturu, vai pievieno/izdzēs kādu. Link to comment Share on other sites More sharing options...
rpr Posted December 13, 2006 Report Share Posted December 13, 2006 neesmu nekad veel innodb izmantojis, jo pilniibaa apmierina MyISAM. kaapeec sarezjgjiit lietas, ja to var izdariit vienkaarshaak? a cik vispaar ir ilgs tas izpildiishanaas laiks? Link to comment Share on other sites More sharing options...
ohmygod Posted December 13, 2006 Author Report Share Posted December 13, 2006 Bubu - viss kārtībā ir ar indexiem. Nekas manā gadījumā nemainās no tā vai viņi ir vai nav. Inserts cik lēns ir bijis, tik arī paliek. Sekundē kādi 5-13 ieraksti. Nomainot Innodb uz MyIsam inserts jūtami palika jūtami ātrāks. aptuveni 2x. Heh - uzliku uz serva, kur šitas griezīsies. Viss notiek - ap 1000 ierakstiem sekundē. Uz MyIsam. InnoDb enīvei lēnu. figviņzin, kas tur, bet ja jau uz MyIsam ir tik ātri - tad uz jamā aŗi palikšos. Btw - MySQL 4.1.20 uz freijas. dzelzis ir Dual Xeon 3.0, 2GB RAM, SCSI cietnji. Link to comment Share on other sites More sharing options...
Delfins Posted December 13, 2006 Report Share Posted December 13, 2006 labs dzelzis un dīvaini sakonfigurēts mysql. PS: tu vismaz zini/-āji, kas ir InnoDB, pirms taisīji tabulu? mueh. Link to comment Share on other sites More sharing options...
Roze Posted December 13, 2006 Report Share Posted December 13, 2006 Nomainot Innodb uz MyIsam inserts jūtami palika jūtami ātrāks. aptuveni 2x.MyISAM apendo ierakstus līdz ar to operacija vienkāršāka taču ir slikta konkurence (ja tas reizē jādara ar SELECTiem). Btw - MySQL 4.1.20 uz freijas. dzelzis ir Dual Xeon 3.0, 2GB RAM, SCSI cietnji.Jautājums bija par serveri uz kura tu testē un uz kura nenotiek tie INSERTi? Idejiski BSD nav labākais OS priekš MySQL.. Un liekas kaut kas pavisam neforš ar innodb settingiem.. Vai nu threadi pa daudz vai logu commiti nepareizi, vai vari iepeistot innodb_* mainiigos? Tos var dabūt ar šādu kveriju - SHOW VARIABLES LIKE 'innodb%' Link to comment Share on other sites More sharing options...
ohmygod Posted December 13, 2006 Author Report Share Posted December 13, 2006 (edited) Testa serveris (P4 1.8, 1GB RAM), stāv uz winduļa. innodb_additional_mem_pool_size 2097152 innodb_autoextend_increment 8 innodb_buffer_pool_awe_mem_mb 0 innodb_buffer_pool_size 37748736 innodb_data_file_path ibdata1:10M:autoextend innodb_data_home_dir innodb_fast_shutdown ON innodb_file_io_threads 4 innodb_file_per_table OFF innodb_flush_log_at_trx_commit 1 innodb_flush_method innodb_force_recovery 0 innodb_lock_wait_timeout 50 innodb_locks_unsafe_for_binlog OFF innodb_log_arch_dir innodb_log_archive OFF innodb_log_buffer_size 1048576 innodb_log_file_size 18874368 innodb_log_files_in_group 2 innodb_log_group_home_dir .\ innodb_max_dirty_pages_pct 90 innodb_max_purge_lag 0 innodb_mirrored_log_groups 1 innodb_open_files 300 innodb_table_locks ON innodb_thread_concurrency 8 Serveris innodb_additional_mem_pool_size 1048576 innodb_autoextend_increment 8 innodb_buffer_pool_awe_mem_mb 0 innodb_buffer_pool_size 8388608 innodb_data_file_path ibdata1:10M:autoextend innodb_data_home_dir innodb_fast_shutdown ON innodb_file_io_threads 4 innodb_file_per_table OFF innodb_flush_log_at_trx_commit 1 innodb_flush_method innodb_force_recovery 0 innodb_lock_wait_timeout 50 innodb_locks_unsafe_for_binlog OFF innodb_log_arch_dir innodb_log_archive OFF innodb_log_buffer_size 1048576 innodb_log_file_size 5242880 innodb_log_files_in_group 2 innodb_log_group_home_dir ./ innodb_max_dirty_pages_pct 90 innodb_max_purge_lag 0 innodb_mirrored_log_groups 1 innodb_open_files 300 innodb_table_locks ON innodb_thread_concurrency 8 Ir tā, ka es no servu konfigur�“šanām esmu patālu un arī to nemaz nedaru, to dara pavisam cits cilv�“ks. Itkā sakarīgs.... Ja kkas nav riktīgi - būs jāsado pa kaklu :) Edited December 13, 2006 by ohmygod Link to comment Share on other sites More sharing options...
Roze Posted December 13, 2006 Report Share Posted December 13, 2006 Sākumā my.cnf ieliec innodb_flush_log_at_trx_commit = 0 pārstartē serveri un paskaties vai ir labāk.. šis varētu būt sāpiīgi pie daudz insertiem kur InnoDB sanāk comitot uz logu pie katra updeita Link to comment Share on other sites More sharing options...
hmnc Posted December 14, 2006 Report Share Posted December 14, 2006 Roze - kāpēc domā, ka *BSD nav piemērots MySQL? Link to comment Share on other sites More sharing options...
Delfins Posted December 14, 2006 Report Share Posted December 14, 2006 (edited) Liekas ,ka tas ir port�“ts... un probl�“mas ar threadiem. http://dev.mysql.com/doc/refman/5.0/en/bsd-notes.html http://jeremy.zawodny.com/blog/archives/000697.html Edited December 14, 2006 by Delfins Link to comment Share on other sites More sharing options...
Recommended Posts