| 3681 | } |
| 3682 | |
| 3683 | fn perf_diagnose_buffer_cache() -> Result<()> { |
| 3684 | Pglite::preload()?; |
| 3685 | let cases = speed_cases(1.0, SpeedSqlSource::PgliteVendored)?; |
| 3686 | let diagnostics = vec![ |
| 3687 | run_buffer_cache_diagnostic_case( |
| 3688 | &cases, |
| 3689 | "11", |
| 3690 | &[ |
| 3691 | "BEGIN", |
| 3692 | "INSERT INTO t1 SELECT b,a,c FROM t2", |
| 3693 | "INSERT INTO t2 SELECT b,a,c FROM t1", |
| 3694 | "COMMIT", |
| 3695 | ], |
| 3696 | )?, |
| 3697 | run_buffer_cache_diagnostic_case(&cases, "14", &["INSERT INTO t2 SELECT * FROM t1"])?, |
| 3698 | ]; |
| 3699 | |
| 3700 | let report = BufferCacheDiagnosticReport { |
| 3701 | source_model: "Exact PGlite benchmark SQL files from assets/checkouts/pglite/packages/benchmark/src.", |
| 3702 | measurement_model: "Each case opens a fresh temporary database, runs all earlier PGlite speed tests outside the measured section, then executes EXPLAIN (ANALYZE, BUFFERS, FORMAT JSON) for the target data-moving statements.", |
| 3703 | cases: diagnostics, |
| 3704 | }; |
| 3705 | println!("{}", serde_json::to_string_pretty(&report)?); |
| 3706 | Ok(()) |
| 3707 | } |
| 3708 | |
| 3709 | fn run_buffer_cache_diagnostic_case( |
| 3710 | cases: &[SpeedCase], |