mem.sql 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  1. CREATE TABLE IF NOT EXISTS processes (
  2. id INTEGER PRIMARY KEY AUTOINCREMENT,
  3. name TEXT NOT NULL UNIQUE
  4. );
  5. CREATE INDEX IF NOT EXISTS process_name_idx ON processes(name);
  6. CREATE TABLE IF NOT EXISTS observations (
  7. id INTEGER PRIMARY KEY AUTOINCREMENT,
  8. time INTEGER NOT NULL,
  9. rss INTEGER NOT NULL,
  10. process_id INTEGER NOT NULL REFERENCES processes(id)
  11. );
  12. CREATE INDEX IF NOT EXISTS observations_time_idx ON observations(time);
  13. CREATE INDEX IF NOT EXISTS observations_process_id_idx ON observations(process_id);
  14. CREATE VIEW IF NOT EXISTS procsummary AS
  15. SELECT
  16. p.name as name,
  17. o.time as time,
  18. max(o.rss) as max_rss,
  19. avg(o.rss) as avg_rss,
  20. sum(o.rss) as rss,
  21. count(o.id) as num_procs
  22. FROM
  23. observations AS o
  24. JOIN
  25. processes AS p ON
  26. p.id = o.process_id
  27. GROUP BY
  28. o.time, p.name
  29. ;
  30. /* Writable view for simplicity's sake */
  31. CREATE TRIGGER IF NOT EXISTS
  32. procsummary_wv_processes
  33. INSTEAD OF INSERT ON
  34. procsummary
  35. BEGIN
  36. INSERT OR IGNORE INTO processes (name) VALUES (new.name);
  37. INSERT INTO observations (time,rss,process_id) VALUES ( strftime("%s", "now"), new.rss, (SELECT id FROM processes AS p WHERE p.name=new.name) );
  38. END;