With many indicies, inserts can be slow, and since you are queueing them up as fast as possible, no other queries have a chance to get in.
Monte Ohrt wrote: > Thanks for the quick reply Gerald. > > What specifically is being loaded? The system load certainly isn't the > problem. Is it a buffer that fills, or a lock queue, or something > else? Although the inserts are done in rapid succession, there is only > one connection at a time so it shouldn't be a # of connections issue. > And why is the entire server affected, not just that table? > > TIA > > Monte > > Gerald Clark wrote: > >> You need to throttle back the inserts. >> You are doing 5-10 inserts per second, but >> that is fully loading the server. >> >> Do 1 or 2 inserts, and sleep a second. >> >> Monte Ohrt wrote: >> >>> Hi, >>> >>> I have hundreds of mysql databases on a server, mostly filled with >>> newspaper articles for web sites. >>> >>> For one particular database, I have about 10,000 archived articles I >>> want to load in. I want to do this without affecting the performance >>> of the live site (or any other sites using this db server.) The >>> table in question has many indexes on the live table, including a >>> full-text index. I'm not so concerned about the speed of the >>> loading, just as fast as possible without noticable live db access >>> performance loss. >>> >>> Now for loading, one way to do it is like this: >>> >>> insert into LIVE_DB.articles select * from IMPORT_DB.articles; >>> >>> The problem with this is that no read/writes can happen on this >>> table while the articles are loaded, basically "hanging" the web >>> site. Then I thought maybe this would help: >>> >>> insert LOW_PRIORITY into LIVE_DB.articles select * from >>> IMPORT_DB.articles; >>> >>> This doesn't help, it still locks the table during the query, not >>> per record (I think?) >>> >>> The only other alternative was to insert record by record with a >>> script using low priority inserts (I used php.) This is slower, but >>> it should avoid the locking problems and performance issues (or so I >>> thought): >>> >>> <?php >>> >>> $sql->query("select id from IMPORT_DB.articles"); >>> >>> // loop through each record to import >>> while ($sql->next()) { >>> >>> $id = $sql->record['id']; >>> >>> // insert current record into live db >>> $sql2->query("insert LOW_PRIORITY into LIVE_DB.articles select * >>> from IMPORT_DB.articles where id='$id'"); >>> >>> } >>> >>> ?> >>> >>> >>> >>> This inserts each record one by one with LOW_PRIORITY, so if a read >>> or write comes along, it _should_ immediately let the query through, >>> right? Running this script clips along at about 5-10 records/second. >>> But during this time, live db access becomes _extremely_ slow, >>> taking up to a matter of minutes to execute queries that normally >>> take seconds. Not just the table being loaded, but any table in any >>> database on the server! The system RAM and CPU cycles hardly move, >>> this isn't a problem. Mostly idle with a load of 0.01 to 0.5, and >>> 70%+ of 2GB RAM available. >>> >>> What is happening here? a table locking/queueing issue, or something >>> else? Maybe there is a better way to load data without affecting >>> performance? >>> >>> MySQL 3.23.33, Solaris 8 Sparc. >>> >>> Monte >>> >>> >> >> >> > > > --------------------------------------------------------------------- Before posting, please check: http://www.mysql.com/manual.php (the manual) http://lists.mysql.com/ (the list archive) To request this thread, e-mail <[EMAIL PROTECTED]> To unsubscribe, e-mail <[EMAIL PROTECTED]> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php