abe5295968f05bfd307f8797727971c3f743364c kent Wed May 18 15:43:36 2011 -0700 Putting some verboseTimes in to try and find bottlenecks in mdbUpdate. Looks like bottleneck is the database load though.... diff --git src/hg/lib/mdb.c src/hg/lib/mdb.c index 15cae04..c1b60c8 100644 --- src/hg/lib/mdb.c +++ src/hg/lib/mdb.c @@ -1114,54 +1114,58 @@ sqlEscapeString(mdbVar->val)); // FIXME Strip quotes verbose(2, "Requesting insert of one row:\n\t%s;\n",query); if(!testOnly) sqlUpdate(conn, query); count++; } } sqlReleaseLock(conn, lock); return count; } int mdbObjsLoadToDb(struct sqlConnection *conn,char *tableName,struct mdbObj *mdbObjs,boolean testOnly) // Adds mdb Objs with minimal error checking { int count = 0; +verboseTime(2, "Start of mdbObjsLoadToDb %s", tableName); if (tableName == NULL) tableName = mdbTableName(conn,TRUE); // defaults to sandbox, if it exists, else MDB_DEFAULT_NAME; else if (!sqlTableExists(conn,tableName)) errAbort("mdbObjsLoadToDb attempting to load non-existent table named '%s'.\n",tableName); assert(mdbObjs != NULL); // If this is the case, then be vocal #define MDB_TEMPORARY_TAB_FILE "temporaryMdb.tab" long lastTime = 0; count = mdbObjPrintToTabFile(mdbObjs,MDB_TEMPORARY_TAB_FILE); +verboseTime(2, "past mdbObjPrintToTabFile()", tableName); // Disable keys in hopes of speeding things up. No danger since it only disables non-unique keys char query[8192]; safef(query, sizeof(query),"alter table %s disable keys",tableName); sqlUpdate(conn, query); // Quick? load sqlLoadTabFile(conn, MDB_TEMPORARY_TAB_FILE, tableName, SQL_TAB_FILE_WARN_ON_ERROR|SQL_TAB_FILE_WARN_ON_WARN); +verboseTime(2, "past sqlLoadTabFile()"); // Enabling the keys again safef(query, sizeof(query),"alter table %s enable keys",tableName); sqlUpdate(conn, query); +verboseTime(2, "Past alter table"); unlink(MDB_TEMPORARY_TAB_FILE); verbose(0,"%04ldms - Done loading mdb with 'LOAD DATA INFILE' mysql command.\n",(clock1000() - lastTime)); return count; } // ------------------ Querys ------------------- struct mdbObj *mdbObjQuery(struct sqlConnection *conn,char *table,struct mdbObj *mdbObj) // Query the metadata table by obj and optional vars and vals in metaObj struct. If mdbObj is NULL query all. // Returns new mdbObj struct fully populated and sorted in obj,var order. { // select obj,var,val where (var= [and val=]) or ([var= and] val=) order by obj,var boolean buildHash = TRUE;