#241: on production, All Subscriptions' query runs in 31 ms, unread oldest-first in 30, the feed list's count in 5, generic plans included (EXPLAIN ANALYZE, BUFFERS, read only), against 0.3-1.6 s in ipx. A new Postgres connection takes 80-330 ms to open, and a page load asks for more than are idle: four of six slow loads came as the pool grew (3 to 6, 2 to 6, 3 to 5, 6 to 8), and 20 requests at once took a median 414 ms while the pool grew from 8 to 20. The daemon and the directory's server now keep their whole pool open (min = max); a command such as `ipx status`, and the tests, which share the server's 100 connections, open as they need. #246: the page reports list_shown, the ms from asking for a list to drawing it, with the view and filter, under the click's trace; background refreshes are not timed. Timings skip report()'s once-a-minute limit, which is for errors in a loop. A dashboard panel and table, and the prod check, read it. #245: the load test's browse scenario subscribes by OPML and leaves the Directory, which is ipx-directory's since #204, to it. CLAUDE.md records the owner's leave to EXPLAIN (ANALYZE, BUFFERS) any query on production, read only. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -23,8 +23,6 @@ export const options = {
|
||||
'http_req_duration{name:all-entries}': p95(50, 100),
|
||||
'http_req_duration{name:feed-entries}': p95(50, 100),
|
||||
'http_req_duration{name:search}': p95(60, 100),
|
||||
'http_req_duration{name:directory}': p95(250, 200),
|
||||
'http_req_duration{name:listed}': p95(300, 200),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -44,11 +42,7 @@ export default function () {
|
||||
const found = http.get(`${BASE}/api/entries?q=weather&limit=50`, as(u, 'search'));
|
||||
check(found, { 'a search of everything you read': r => r.status === 200 && r.json().total === 30 * ITEMS });
|
||||
|
||||
const dir = http.get(`${BASE}/api/directory`, as(u, 'directory'));
|
||||
check(dir, { 'the whole Directory': r => r.status === 200 && r.json().length === FEEDS });
|
||||
|
||||
const listed = http.get(`${BASE}/api/directory/${feedId(Math.floor(Math.random() * FEEDS))}`, as(u, 'listed'));
|
||||
check(listed, { "a feed's page in the Directory": r => r.status === 200 && r.json().items.length === ITEMS });
|
||||
// Not the Directory: since #204 it is ipx-directory's, which this harness does not start (#245).
|
||||
|
||||
sleep(1 + Math.random() * 2);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user