After an evaluation, GNOME has moved from Bugzilla to GitLab. Learn more about GitLab.
No new issues can be reported in GNOME Bugzilla anymore.
To report an issue in a GNOME project, go to GNOME GitLab.
Do not go to GNOME Gitlab for: Bluefish, Doxygen, GnuCash, GStreamer, java-gnome, LDTP, NetworkManager, Tomboy.
Bug 662561 - Queries on smart playlist tables take too long
Queries on smart playlist tables take too long
Status: RESOLVED DUPLICATE of bug 648592
Product: banshee
Classification: Other
Component: Smart Playlists
2.2.0
Other Linux
: Normal major
: ---
Assigned To: Banshee Maintainers
Banshee Maintainers
Depends on:
Blocks:
 
 
Reported: 2011-10-23 22:16 UTC by Trey Raymond
Modified: 2011-10-24 00:56 UTC
See Also:
GNOME target: ---
GNOME version: ---



Description Trey Raymond 2011-10-23 22:16:54 UTC
Banshee has become basically unusable due to a few sql operations taking 70-160 seconds each.  Generally hangs when fetching next track to play after one completes...or when syncing a device

Two examples I found:

[4 Debug 18:05:11.586] Executed in 70871ms SELECT COUNT(*), SUM(CoreTracks.FileSize), SUM(CoreTracks.Duration) FROM CoreTracks CROSS JOIN CoreArtists,CoreAlbums, CoreSmartPlaylistEntries WHERE CoreArtists.ArtistID = CoreTracks.ArtistID AND CoreAlbums.AlbumID = CoreTracks.AlbumID  AND  CoreSmartPlaylistEntries.TrackID = CoreTracks.TrackID AND CoreSmartPlaylistEntries.SmartPlaylistID = 1 

sqlite> explain SELECT COUNT(*), SUM(CoreTracks.FileSize), SUM(CoreTracks.Duration) FROM CoreTracks CROSS JOIN CoreArtists,CoreAlbums, CoreSmartPlaylistEntries WHERE CoreArtists.ArtistID = CoreTracks.ArtistID AND CoreAlbums.AlbumID = CoreTracks.AlbumID  AND  CoreSmartPlaylistEntries.TrackID = CoreTracks.TrackID AND CoreSmartPlaylistEntries.SmartPlaylistID = 1;
addr|opcode|p1|p2|p3|p4|p5|comment
0|Trace|0|0|0||00|
1|Null|0|4|0||00|
2|Null|0|5|0||00|
3|Null|0|1|0||00|
4|Null|0|2|0||00|
5|Null|0|3|0||00|
6|Integer|1|6|0||00|
7|Goto|0|44|0||00|
8|OpenRead|0|5|0|24|00|
9|OpenRead|1|11|0|0|00|
10|OpenRead|3|18|0|3|00|
11|OpenRead|2|8|0|0|00|
12|Rewind|0|32|0||00|
13|Column|0|2|7||00|
14|MustBeInt|7|31|0||00|
15|NotExists|1|31|7||00|
16|Rewind|3|31|0||00|
17|Column|3|2|8||00|
18|Rowid|0|9|0||00|
19|Ne|9|30|8|collseq(BINARY)|6b|
20|Column|3|1|10||00|
21|Ne|6|30|10|collseq(BINARY)|6c|
22|Column|0|3|11||00|
23|MustBeInt|11|30|0||00|
24|NotExists|2|30|11||00|
25|AggStep|0|0|1|count(0)|00|
26|Column|0|9|12||00|
27|AggStep|0|12|2|sum(1)|01|
28|Column|0|23|12||00|
29|AggStep|0|12|3|sum(1)|01|
30|Next|3|17|0||01|
31|Next|0|13|0||01|
32|Close|0|0|0||00|
33|Close|1|0|0||00|
34|Close|3|0|0||00|
35|Close|2|0|0||00|
36|AggFinal|1|0|0|count(0)|00|
37|AggFinal|2|1|0|sum(1)|00|
38|AggFinal|3|1|0|sum(1)|00|
39|Copy|1|13|0||00|
40|Copy|2|14|0||00|
41|Copy|3|15|0||00|
42|ResultRow|13|3|0||00|
43|Halt|0|0|0||00|
44|Transaction|0|0|0||00|
45|VerifyCookie|0|56|0||00|
46|TableLock|0|5|0|CoreTracks|00|
47|TableLock|0|11|0|CoreArtists|00|
48|TableLock|0|18|0|CoreSmartPlaylistEntries|00|
49|TableLock|0|8|0|CoreAlbums|00|
50|Goto|0|8|0||00|


[4 Debug 18:06:22.866] Executed in 71263ms 
                    DELETE FROM CoreCache WHERE ModelID = 7;
                        INSERT INTO CoreCache (ModelID, ItemID) SELECT 7, CoreTracks.TrackID FROM CoreTracks CROSS JOIN CoreArtists,CoreAlbums, CoreSmartPlaylistEntries WHERE CoreArtists.ArtistID = CoreTracks.ArtistID AND CoreAlbums.AlbumID = CoreTracks.AlbumID  AND  CoreSmartPlaylistEntries.TrackID = CoreTracks.TrackID AND CoreSmartPlaylistEntries.SmartPlaylistID = 1  ORDER BY 
                        CoreArtists.NameSortKey ASC,
                        CoreTracks.Year ASC,
                        CoreAlbums.TitleSortKey ASC,
                        CoreTracks.Disc ASC,
                        CoreTracks.TrackNumber ASC
sqlite> explain select * from CoreCache where ModelID=7;
Error: no such table: CoreCache
sqlite> explain SELECT 7, CoreTracks.TrackID FROM CoreTracks CROSS JOIN CoreArtists,CoreAlbums, CoreSmartPlaylistEntries WHERE CoreArtists.ArtistID = CoreTracks.ArtistID AND CoreAlbums.AlbumID = CoreTracks.AlbumID  AND  CoreSmartPlaylistEntries.TrackID = CoreTracks.TrackID AND CoreSmartPlaylistEntries.SmartPlaylistID = 1  ORDER BY 
   ...>                         CoreArtists.NameSortKey ASC,
   ...>                         CoreTracks.Year ASC,
   ...>                         CoreAlbums.TitleSortKey ASC,
   ...>                         CoreTracks.Disc ASC,
   ...>                         CoreTracks.TrackNumber ASC;
addr|opcode|p1|p2|p3|p4|p5|comment
0|Trace|0|0|0||00|
1|OpenEphemeral|4|7|0|keyinfo(5,BINARY,BINARY)|00|
2|Integer|1|1|0||00|
3|Goto|0|48|0||00|
4|OpenRead|0|5|0|25|00|
5|OpenRead|1|11|0|7|00|
6|OpenRead|3|18|0|3|00|
7|OpenRead|2|8|0|8|00|
8|Rewind|0|35|0||00|
9|Column|0|2|2||00|
10|MustBeInt|2|34|0||00|
11|NotExists|1|34|2||00|
12|Rewind|3|34|0||00|
13|Column|3|2|3||00|
14|Rowid|0|4|0||00|
15|Ne|4|33|3|collseq(BINARY)|6b|
16|Column|3|1|5||00|
17|Ne|1|33|5|collseq(BINARY)|6c|
18|Column|0|3|6||00|
19|MustBeInt|6|33|0||00|
20|NotExists|2|33|6||00|
21|Integer|7|7|0||00|
22|Rowid|0|8|0||00|
23|MakeRecord|7|2|6||00|
24|Column|1|6|9||00|
25|Column|0|24|10||00|
26|Column|2|7|11||00|
27|Column|0|21|12||00|
28|Column|0|19|13||00|
29|Sequence|4|14|0||00|
30|Move|6|15|1||00|
31|MakeRecord|9|7|5||00|
32|IdxInsert|4|5|0||00|
33|Next|3|13|0||01|
34|Next|0|9|0||01|
35|Close|0|0|0||00|
36|Close|1|0|0||00|
37|Close|3|0|0||00|
38|Close|2|0|0||00|
39|OpenPseudo|5|6|2||00|
40|Sort|4|46|0||00|
41|Column|4|6|6||00|
42|Column|5|0|7||20|
43|Column|5|1|8||00|
44|ResultRow|7|2|0||00|
45|Next|4|41|0||00|
46|Close|5|0|0||00|
47|Halt|0|0|0||00|
48|Transaction|0|0|0||00|
49|VerifyCookie|0|56|0||00|
50|TableLock|0|5|0|CoreTracks|00|
51|TableLock|0|11|0|CoreArtists|00|
52|TableLock|0|18|0|CoreSmartPlaylistEntries|00|
53|TableLock|0|8|0|CoreAlbums|00|
54|Goto|0|4|0||00|


I tried emptying the smartplaylists and smartplaylistentries tables, but it repopulates them automatically.  I don't actually have any smart playlists, but the system ones exist
sqlite> select * from CoreSmartPlaylists;
PrimarySourceID|SmartPlaylistID|Name|Condition|OrderBy|LimitNumber|LimitCriterion|CachedCount|IsTemporary|IsHiddenWhenEmpty
1|1|sync_list||||||1|0
1|2|to_add||||||1|0
15|3|to_remove|||||0|1|0
2|4|sync_list|||||0|1|0
2|5|to_add|<request><query banshee-version="1"><equals><field name="smartplaylistid" /><int>4</int></equals></query></request>||||0|1|0
15|6|to_remove|||||0|1|0
15|7|Music|||||0|0|0
15|8|Videos|||||0|0|0
15|9|Podcasts|||||0|0|0

sqlite> select count(*) from CoreSmartPlaylistEntries;
count(*)
37448



This has only happened since I ran some recent updates.  Banshee will not let me roll back to an earlier sqlite (2.x or so) to test as sqlite3 is a dependency.
using libsqlite3-0 v 3.7.7-2ubuntu2
Comment 1 Andrés G. Aragoneses (IRC: knocte) 2011-10-24 00:56:16 UTC
Thanks for the bug report. This particular bug has already been reported into our bug tracking system, but please feel free to report any further bugs you find.

*** This bug has been marked as a duplicate of bug 648592 ***