Upload of Latency testing code for the sakila test database in MySQL

This commit is contained in:
Luke Else 2023-05-19 12:26:01 +01:00
parent a41cb539a3
commit adb0dddb59
3 changed files with 85 additions and 0 deletions

45
.vscode/launch.json vendored Normal file
View File

@ -0,0 +1,45 @@
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
"version": "0.2.0",
"configurations": [
{
"type": "lldb",
"request": "launch",
"name": "Debug executable 'sql_load_test'",
"cargo": {
"args": [
"build",
"--bin=sql_load_test",
"--package=sql_load_test"
],
"filter": {
"name": "sql_load_test",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
},
{
"type": "lldb",
"request": "launch",
"name": "Debug unit tests in executable 'sql_load_test'",
"cargo": {
"args": [
"test",
"--no-run",
"--bin=sql_load_test",
"--package=sql_load_test"
],
"filter": {
"name": "sql_load_test",
"kind": "bin"
}
},
"args": [],
"cwd": "${workspaceFolder}"
}
]
}

9
Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "sql_latency_test"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
mysql = "24.0.0"

31
src/main.rs Normal file
View File

@ -0,0 +1,31 @@
use std::time::{SystemTime, Duration};
use mysql::*;
use mysql::prelude::*;
fn main() -> std::result::Result<(), Box<dyn std::error::Error>> {
//Create a connection pool
let url = "mysql://sakila:p_ssW0rd@localhost:3306/sakila";
let pool = Pool::new(url)?;
let mut conn = pool.get_conn()?;
//Outline the number of queries and mark the start time.
const NUMQUERIES: u32 = 5_000;
let mut times: Vec<(u32, Duration)> = vec![];
let start_time = SystemTime::now();
// Run the Query, NUM_QUERIES times
for i in 0..NUMQUERIES {
let start_query = SystemTime::now();
let _ = conn.query_drop(r"SELECT release_year, COUNT(*) FROM sakila.film INNER JOIN (SELECT DISTINCT release_year FROM sakila.film) release_years USING (release_year) GROUP BY release_year;")?;
times.push((i, SystemTime::now().duration_since(start_query).unwrap()))
}
//Output results
println!("Total execution time: {}s", SystemTime::now().duration_since(start_time).unwrap().as_secs_f32());
for (query_id, duration) in times.iter() {
println!("{}: {}.{} milliseconds", query_id, duration.as_millis(), duration.as_micros());
}
Ok(())
}