tracker r2729 - in trunk: . data/db src/libtracker-db src/trackerd



Author: mr
Date: Thu Dec 18 12:34:12 2008
New Revision: 2729
URL: http://svn.gnome.org/viewvc/tracker?rev=2729&view=rev

Log:
	* data/db/sqlite-service.sql: Added indexes for the Services table
	on Enabled, AuxilaryID and KeyMetadata{1|2|3} to improve
	performance for queries.

	* src/trackerd/tracker-processor.c: 
	* src/libtracker-db/tracker-db-manager.[ch]: Added an _optimize()
	API call which calls ANALYZE on the Services tables for emails and
	files.


Modified:
   trunk/ChangeLog
   trunk/data/db/sqlite-service.sql
   trunk/src/libtracker-db/tracker-db-manager.c
   trunk/src/libtracker-db/tracker-db-manager.h
   trunk/src/trackerd/tracker-processor.c

Modified: trunk/data/db/sqlite-service.sql
==============================================================================
--- trunk/data/db/sqlite-service.sql	(original)
+++ trunk/data/db/sqlite-service.sql	Thu Dec 18 12:34:12 2008
@@ -40,8 +40,13 @@
 
 );
 
-CREATE INDEX  ServiceIndex1 ON Services (ServiceTypeID);
-
+/* Add indexes for Service table */
+CREATE INDEX ServiceTypeIndex1 ON Services (ServiceTypeID);
+CREATE INDEX ServiceAuxiliaryIDIndex1 ON Services (AuxilaryID);
+CREATE INDEX ServiceEnabledIndex1 ON Services (Enabled);
+CREATE INDEX ServiceKeyMetadata1Index1 ON Services (KeyMetadata1);
+CREATE INDEX ServiceKeyMetadata2Index1 ON Services (KeyMetadata2);
+CREATE INDEX ServiceKeyMetadata3Index1 ON Services (KeyMetadata3); 
 
 /* child service relationships for a specific group/struct metadata */
 CREATE TABLE ChildServices

Modified: trunk/src/libtracker-db/tracker-db-manager.c
==============================================================================
--- trunk/src/libtracker-db/tracker-db-manager.c	(original)
+++ trunk/src/libtracker-db/tracker-db-manager.c	Thu Dec 18 12:34:12 2008
@@ -1947,9 +1947,9 @@
 
 		while (conf_file) {
 
-			if (!strcmp (conf_file, "default.service")
-			    || !strcmp (conf_file, "default.metadata")
-			    || g_str_has_prefix (conf_file, "xesam")) {
+			if (!strcmp (conf_file, "default.service") ||
+			    !strcmp (conf_file, "default.metadata") || 
+			    g_str_has_prefix (conf_file, "xesam")) {
 				conf_file = g_dir_read_name (services);
 				continue;
 			}
@@ -2670,7 +2670,6 @@
 			g_object_unref (dbs[i].iface);
 			dbs[i].iface = NULL;
 		}
-
 	} else {
 		/* Make sure we remove and recreate the cache directory in tmp
 		 * each time we start up, this is meant to be a per-run
@@ -2768,6 +2767,51 @@
 	db_manager_remove_all ();
 }
 
+void
+tracker_db_manager_optimize (void)
+{
+	TrackerDBInterface *iface;
+	TrackerDB           db;
+	gboolean            dbs_are_open = FALSE;
+	gint                i;
+
+	g_return_if_fail (initialized != FALSE);
+
+	g_message ("Optimizing databases...");
+
+	g_message ("  Checking DBs are not open");
+
+	/* Check if any connections are open? */
+	for (i = 1; i < G_N_ELEMENTS (dbs); i++) {
+		if (G_OBJECT (dbs[i].iface)->ref_count > 1) {
+			g_message ("  DB:'%s' is still open with %d references!",
+				   dbs[i].name,
+				   G_OBJECT (dbs[i].iface)->ref_count);
+				   
+			dbs_are_open = TRUE;
+		}
+	}
+
+	if (dbs_are_open) {
+		g_message ("  Not optimizing DBs, some are still open with > 1 reference");
+		return;
+	}
+
+	/* Optimize the file content database first */
+	db = TRACKER_DB_FILE_METADATA;
+
+	g_message ("  Analysing DB:'%s'", dbs[db].name);
+	iface = tracker_db_manager_get_db_interface (db);
+	db_exec_no_reply (iface, "ANALYSE %s.Services", dbs[db].name);
+
+	/* Optimize the email contents database second */
+	db = TRACKER_DB_EMAIL_METADATA;
+
+	g_message ("  Analysing DB:'%s'", dbs[db].name);
+	iface = tracker_db_manager_get_db_interface (db);
+	db_exec_no_reply (iface, "ANALYSE %s.Services", dbs[db].name);
+}
+
 const gchar *
 tracker_db_manager_get_file (TrackerDB db)
 {

Modified: trunk/src/libtracker-db/tracker-db-manager.h
==============================================================================
--- trunk/src/libtracker-db/tracker-db-manager.h	(original)
+++ trunk/src/libtracker-db/tracker-db-manager.h	Thu Dec 18 12:34:12 2008
@@ -67,7 +67,7 @@
 void	     tracker_db_manager_shutdown		    (void);
 
 void	     tracker_db_manager_remove_all		    (void);
-void	     tracker_db_manager_close_all		    (void);
+void         tracker_db_manager_optimize		    (void);
 
 const gchar *tracker_db_manager_get_file		    (TrackerDB		    db);
 TrackerDBInterface *

Modified: trunk/src/trackerd/tracker-processor.c
==============================================================================
--- trunk/src/trackerd/tracker-processor.c	(original)
+++ trunk/src/trackerd/tracker-processor.c	Thu Dec 18 12:34:12 2008
@@ -1119,6 +1119,7 @@
 
 	/* Do we even need this step Optimizing ? */
 	tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
+	tracker_db_manager_optimize ();
 
 	/* Now the indexer is done, we can signal our status as IDLE */
 	tracker_status_set_and_signal (TRACKER_STATUS_IDLE);
@@ -1426,6 +1427,7 @@
 
 	processor->private->iterated_removable_media = FALSE;
 
+	/* FIXME: Do we need optimizing in here? */
 	if (status == TRACKER_STATUS_INDEXING ||
 	    status == TRACKER_STATUS_OPTIMIZING ||
 	    status == TRACKER_STATUS_IDLE) {
@@ -1620,8 +1622,8 @@
 	 * indexer and we set the state to INDEXING
 	 */
 	if (processor->private->interrupted) {
-		/* Do we even need this step optimizing ? */
 		tracker_status_set_and_signal (TRACKER_STATUS_OPTIMIZING);
+		tracker_db_manager_optimize ();
 
 		/* All done */
 		tracker_status_set_and_signal (TRACKER_STATUS_IDLE);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]