| 36 | } |
| 37 | |
| 38 | const run = async () => { |
| 39 | const client = new pg.Client() |
| 40 | await client.connect() |
| 41 | console.log('start') |
| 42 | await client.query('CREATE TEMP TABLE foobar(name TEXT, age NUMERIC)') |
| 43 | await client.query('CREATE TEMP TABLE buf(name TEXT, data BYTEA)') |
| 44 | await bench(client, params, 1000) |
| 45 | console.log('warmup done') |
| 46 | const seconds = 5 |
| 47 | |
| 48 | for (let i = 0; i < 4; i++) { |
| 49 | let queries = await bench(client, params, seconds * 1000) |
| 50 | console.log('') |
| 51 | console.log('param queries:', queries) |
| 52 | console.log('qps', queries / seconds) |
| 53 | console.log('on my laptop best so far seen 987 qps') |
| 54 | |
| 55 | queries = await bench(client, { ...params, name: 'params' }, seconds * 1000) |
| 56 | console.log('') |
| 57 | console.log('named queries:', queries) |
| 58 | console.log('qps', queries / seconds) |
| 59 | console.log('on my laptop best so far seen 937 qps') |
| 60 | |
| 61 | console.log('') |
| 62 | queries = await bench(client, seq, seconds * 1000) |
| 63 | console.log('sequence queries:', queries) |
| 64 | console.log('qps', queries / seconds) |
| 65 | console.log('on my laptop best so far seen 2725 qps') |
| 66 | |
| 67 | console.log('') |
| 68 | queries = await bench(client, insert, seconds * 1000) |
| 69 | console.log('insert queries:', queries) |
| 70 | console.log('qps', queries / seconds) |
| 71 | console.log('on my laptop best so far seen 27383 qps') |
| 72 | |
| 73 | console.log('') |
| 74 | console.log('Warming up bytea test') |
| 75 | await client.query({ |
| 76 | text: 'INSERT INTO buf(name, data) VALUES ($1, $2)', |
| 77 | values: ['test', Buffer.allocUnsafe(104857600)], |
| 78 | }) |
| 79 | console.log('bytea warmup done') |
| 80 | const start = performance.now() |
| 81 | const results = await client.query('SELECT * FROM buf') |
| 82 | const time = performance.now() - start |
| 83 | console.log('bytea time:', time, 'ms') |
| 84 | console.log('bytea length:', results.rows[0].data.byteLength, 'bytes') |
| 85 | console.log('on my laptop best so far seen 1407ms and 104857600 bytes') |
| 86 | await new Promise((resolve) => setTimeout(resolve, 250)) |
| 87 | } |
| 88 | |
| 89 | await client.end() |
| 90 | await client.end() |
| 91 | } |
| 92 | |
| 93 | run().catch((e) => console.error(e) || process.exit(-1)) |