tracker r2729 - in trunk: . data/db src/libtracker-db src/trackerd
- From: mr svn gnome org
- To: svn-commits-list gnome org
- Subject: tracker r2729 - in trunk: . data/db src/libtracker-db src/trackerd
- Date: Thu, 18 Dec 2008 12:34:13 +0000 (UTC)
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]