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

Reply via email to