Database Database Check your db index usage... mysql's EXPLAIN is your friend. Between LOCK TABLES & UNLOCK TABLES, never call a subroutine. Check the DB error code after an SQL statement. Just because it worked once and the SQL is correct, that doesn't mean the table might not go corrupt, a disk might fill up, or index space within the file might not fill up. Errors happen. Deal with them. Preferred way to break up a long SQL query: $sth = $dbh->prepare("SELECT cola, colb, colc, cold FROM foo ". "WHERE colb<>cola AND colc=22"); Note on variable naming: $sth statement handle $dbh one database handle (usually the master) $dbs set of database handles [master(, slave)] $dbr read-only slave db handle (used for selects) $dbarg argument that can take a $dbh/r or $dbs $remote hashref of remote user, based on cookies. will contain 'userid' and 'user' params, unless faster get_remote_noauth was used, in which case only 'user' will be present. $u a user 'object' (a hashref) Call for database handles as you need them, instead of predeclaring $dbx variables. Use LJ::get_db_writer to get a writable handle to the database, and LJ::get_db_reader to get a read-only handle.