query optimizations; split big feed update transaction
This commit is contained in:
parent
03f321db57
commit
44e241cb44
3 changed files with 43 additions and 9 deletions
|
@ -19,10 +19,16 @@
|
||||||
$rows = -1;
|
$rows = -1;
|
||||||
|
|
||||||
if (DB_TYPE == "pgsql") {
|
if (DB_TYPE == "pgsql") {
|
||||||
$result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
|
/* $result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
|
||||||
marked = false AND feed_id = '$feed_id' AND
|
marked = false AND feed_id = '$feed_id' AND
|
||||||
(SELECT date_entered FROM ttrss_entries WHERE
|
(SELECT date_entered FROM ttrss_entries WHERE
|
||||||
id = ref_id) < NOW() - INTERVAL '$purge_interval days'");
|
id = ref_id) < NOW() - INTERVAL '$purge_interval days'"); */
|
||||||
|
|
||||||
|
$result = db_query($link, "DELETE FROM ttrss_user_entries WHERE
|
||||||
|
ttrss_entries.id = ref_id AND
|
||||||
|
marked = false AND
|
||||||
|
feed_id = '$feed_id' AND
|
||||||
|
ttrss_entries.date_entered < NOW() - INTERVAL '$purge_interval days'");
|
||||||
|
|
||||||
$rows = pg_affected_rows($result);
|
$rows = pg_affected_rows($result);
|
||||||
|
|
||||||
|
@ -40,10 +46,23 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function global_purge_old_posts($link, $do_output = false) {
|
function global_purge_old_posts($link, $do_output = false, $limit = false) {
|
||||||
|
|
||||||
|
if (DB_TYPE == "mysql") {
|
||||||
|
$random_qpart = "RAND()";
|
||||||
|
} else {
|
||||||
|
$random_qpart = "RANDOM()";
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($limit) {
|
||||||
|
$limit_qpart = "LIMIT $limit";
|
||||||
|
} else {
|
||||||
|
$limit_qpart = "";
|
||||||
|
}
|
||||||
|
|
||||||
$result = db_query($link,
|
$result = db_query($link,
|
||||||
"SELECT id,purge_interval,owner_uid FROM ttrss_feeds ORDER BY id");
|
"SELECT id,purge_interval,owner_uid FROM ttrss_feeds
|
||||||
|
ORDER BY $random_qpart $limit_qpart");
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
|
||||||
|
@ -239,7 +258,7 @@
|
||||||
|
|
||||||
if ($rss) {
|
if ($rss) {
|
||||||
|
|
||||||
db_query($link, "BEGIN");
|
// db_query($link, "BEGIN");
|
||||||
|
|
||||||
$result = db_query($link, "SELECT title,icon_url,site_url,owner_uid
|
$result = db_query($link, "SELECT title,icon_url,site_url,owner_uid
|
||||||
FROM ttrss_feeds WHERE id = '$feed'");
|
FROM ttrss_feeds WHERE id = '$feed'");
|
||||||
|
@ -389,6 +408,8 @@
|
||||||
|
|
||||||
if (!$num_comments) $num_comments = 0;
|
if (!$num_comments) $num_comments = 0;
|
||||||
|
|
||||||
|
db_query($link, "BEGIN");
|
||||||
|
|
||||||
if (db_num_rows($result) == 0) {
|
if (db_num_rows($result) == 0) {
|
||||||
|
|
||||||
// base post entry does not exist, create it
|
// base post entry does not exist, create it
|
||||||
|
@ -533,6 +554,8 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
db_query($link, "COMMIT");
|
||||||
|
|
||||||
/* taaaags */
|
/* taaaags */
|
||||||
// <a href="http://technorati.com/tag/Xorg" rel="tag">Xorg</a>, //
|
// <a href="http://technorati.com/tag/Xorg" rel="tag">Xorg</a>, //
|
||||||
|
|
||||||
|
@ -549,6 +572,8 @@
|
||||||
|
|
||||||
if (count($entry_tags) > 0) {
|
if (count($entry_tags) > 0) {
|
||||||
|
|
||||||
|
db_query($link, "BEGIN");
|
||||||
|
|
||||||
$result = db_query($link, "SELECT id,int_id
|
$result = db_query($link, "SELECT id,int_id
|
||||||
FROM ttrss_entries,ttrss_user_entries
|
FROM ttrss_entries,ttrss_user_entries
|
||||||
WHERE guid = '$entry_guid'
|
WHERE guid = '$entry_guid'
|
||||||
|
@ -582,13 +607,14 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
db_query($link, "COMMIT");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
db_query($link, "UPDATE ttrss_feeds
|
db_query($link, "UPDATE ttrss_feeds
|
||||||
SET last_updated = NOW(), last_error = '' WHERE id = '$feed'");
|
SET last_updated = NOW(), last_error = '' WHERE id = '$feed'");
|
||||||
|
|
||||||
db_query($link, "COMMIT");
|
// db_query($link, "COMMIT");
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
$error_msg = db_escape_string(magpie_error());
|
$error_msg = db_escape_string(magpie_error());
|
||||||
|
|
|
@ -83,6 +83,7 @@ create table ttrss_entries (id serial not null primary key,
|
||||||
|
|
||||||
create index ttrss_entries_guid_index on ttrss_entries(guid);
|
create index ttrss_entries_guid_index on ttrss_entries(guid);
|
||||||
create index ttrss_entries_title_index on ttrss_entries(title);
|
create index ttrss_entries_title_index on ttrss_entries(title);
|
||||||
|
create index ttrss_entries_date_entered_index on ttrss_entries(date_entered);
|
||||||
|
|
||||||
create table ttrss_user_entries (
|
create table ttrss_user_entries (
|
||||||
int_id serial not null primary key,
|
int_id serial not null primary key,
|
||||||
|
|
|
@ -74,14 +74,21 @@
|
||||||
$result = db_query($link, "SELECT feed_url,id,owner_uid,
|
$result = db_query($link, "SELECT feed_url,id,owner_uid,
|
||||||
SUBSTRING(last_updated,1,19) AS last_updated,
|
SUBSTRING(last_updated,1,19) AS last_updated,
|
||||||
update_interval FROM ttrss_feeds ORDER BY last_updated DESC");
|
update_interval FROM ttrss_feeds ORDER BY last_updated DESC");
|
||||||
|
|
||||||
|
$user_prefs_cache = array();
|
||||||
|
|
||||||
while ($line = db_fetch_assoc($result)) {
|
while ($line = db_fetch_assoc($result)) {
|
||||||
|
|
||||||
$upd_intl = $line["update_interval"];
|
$upd_intl = $line["update_interval"];
|
||||||
$user_id = $line["owner_uid"];
|
$user_id = $line["owner_uid"];
|
||||||
|
|
||||||
if (!$upd_intl || $upd_intl == 0) {
|
if (!$upd_intl || $upd_intl == 0) {
|
||||||
$upd_intl = get_pref($link, 'DEFAULT_UPDATE_INTERVAL', $user_id);
|
if (!$user_prefs_cache[$user_id]['DEFAULT_UPDATE_INTERVAL']) {
|
||||||
|
$upd_intl = get_pref($link, 'DEFAULT_UPDATE_INTERVAL', $user_id);
|
||||||
|
$user_prefs_cache[$user_id]['DEFAULT_UPDATE_INTERVAL'] = $upd_intl;
|
||||||
|
} else {
|
||||||
|
$upd_intl = $user_prefs_cache[$user_id]['DEFAULT_UPDATE_INTERVAL'];
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($upd_intl < 0) {
|
if ($upd_intl < 0) {
|
||||||
|
@ -99,7 +106,7 @@
|
||||||
|
|
||||||
print "Updating...\n";
|
print "Updating...\n";
|
||||||
update_rss_feed($link, $line["feed_url"], $line["id"], true);
|
update_rss_feed($link, $line["feed_url"], $line["id"], true);
|
||||||
sleep(3); // prevent flood (FIXME make this an option?)
|
sleep(1); // prevent flood (FIXME make this an option?)
|
||||||
} else {
|
} else {
|
||||||
print "Update not needed.\n";
|
print "Update not needed.\n";
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue