(iterations: usize)
| 3999 | } |
| 4000 | |
| 4001 | fn run_rtt_server_sqlx_benchmark(iterations: usize) -> Result<BenchmarkRun> { |
| 4002 | let open_started = Instant::now(); |
| 4003 | let server = benchmark_pglite_server()?; |
| 4004 | let open_micros = open_started.elapsed().as_micros(); |
| 4005 | let uri = server.database_url(); |
| 4006 | let runtime = tokio::runtime::Builder::new_current_thread() |
| 4007 | .enable_all() |
| 4008 | .build() |
| 4009 | .context("create benchmark Tokio runtime")?; |
| 4010 | |
| 4011 | let (connect_micros, setup_micros, tests) = runtime.block_on(async { |
| 4012 | let connect_started = Instant::now(); |
| 4013 | let mut conn = sqlx::PgConnection::connect(&uri) |
| 4014 | .await |
| 4015 | .context("connect SQLx benchmark client")?; |
| 4016 | let connect_micros = connect_started.elapsed().as_micros(); |
| 4017 | |
| 4018 | let setup_started = Instant::now(); |
| 4019 | conn.execute(rtt_setup_sql()) |
| 4020 | .await |
| 4021 | .context("execute RTT setup over SQLx")?; |
| 4022 | let setup_micros = setup_started.elapsed().as_micros(); |
| 4023 | |
| 4024 | let mut tests = Vec::new(); |
| 4025 | for case in rtt_cases() { |
| 4026 | let mut samples = Vec::with_capacity(iterations); |
| 4027 | for _ in 0..iterations { |
| 4028 | let started = Instant::now(); |
| 4029 | conn.execute(case.sql.as_str()) |
| 4030 | .await |
| 4031 | .with_context(|| format!("execute RTT benchmark {} over SQLx", case.id))?; |
| 4032 | samples.push(started.elapsed().as_micros()); |
| 4033 | } |
| 4034 | tests.push(samples_result( |
| 4035 | case.id, |
| 4036 | format!("Test {}: {}", case.id, case.label), |
| 4037 | "milliseconds", |
| 4038 | iterations, |
| 4039 | samples, |
| 4040 | )); |
| 4041 | } |
| 4042 | conn.close().await.context("close SQLx benchmark client")?; |
| 4043 | Ok::<_, anyhow::Error>((connect_micros, setup_micros, tests)) |
| 4044 | })?; |
| 4045 | server.shutdown()?; |
| 4046 | |
| 4047 | Ok(BenchmarkRun { |
| 4048 | suite: "rtt", |
| 4049 | mode: "server_sqlx", |
| 4050 | description: "PGliteServer over the Postgres wire protocol using one long-lived SQLx connection.", |
| 4051 | open_micros, |
| 4052 | connect_micros: Some(connect_micros), |
| 4053 | setup_micros, |
| 4054 | tests, |
| 4055 | }) |
| 4056 | } |
| 4057 | |
| 4058 | fn run_rtt_server_tokio_postgres_simple_benchmark(iterations: usize) -> Result<BenchmarkRun> { |
no test coverage detected