Skip to content

Commit 6f6051b

Browse files
committed
Reuse prepared query, increase pool size, cleanup
1 parent 09a8c0f commit 6f6051b

File tree

2 files changed

+23
-16
lines changed

2 files changed

+23
-16
lines changed

jdbc/spring-test-db/src/main/kotlin/tech/ydb/testdb/TestDbApplication.kt

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package tech.ydb.testdb
22

3-
import jakarta.persistence.EntityManager
43
import org.slf4j.LoggerFactory
54
import org.springframework.beans.factory.annotation.Autowired
65
import org.springframework.beans.factory.annotation.Value
76
import org.springframework.boot.CommandLineRunner
87
import org.springframework.boot.autoconfigure.SpringBootApplication
98
import org.springframework.boot.runApplication
10-
import java.time.Instant
11-
import java.util.concurrent.ExecutorService
12-
import java.util.concurrent.Executors
9+
import javax.sql.DataSource
10+
import java.util.Locale
11+
import kotlin.math.floor
1312
import kotlin.concurrent.thread
1413

1514
/**
@@ -22,7 +21,7 @@ class TestDbApplication : CommandLineRunner {
2221
}
2322

2423
@Autowired
25-
lateinit var entityManager: EntityManager
24+
lateinit var dataSource: DataSource
2625

2726
@Value("\${workers.count}")
2827
var workersCount: Int = 0
@@ -36,23 +35,29 @@ class TestDbApplication : CommandLineRunner {
3635
val t0 = System.nanoTime()
3736
val end = t0 + 10_000_000_000L
3837
var count = 0
39-
while (System.nanoTime() < end) {
40-
sink += getFixedString(testString).length
41-
count++
38+
dataSource.connection.use { connection ->
39+
connection.isReadOnly = true
40+
connection.prepareStatement("SELECT ?").use { statement ->
41+
while (System.nanoTime() < end) {
42+
statement.setString(1, testString)
43+
statement.executeQuery().use { rs ->
44+
if (rs.next()) {
45+
sink += rs.getString(1).length
46+
}
47+
}
48+
count++
49+
}
50+
}
4251
}
4352
val elapsed = System.nanoTime() - t0
4453
val avgMs = elapsed.toDouble() / count / 1_000_000.0
4554
val opsPerSec = count * 1e9 / elapsed
46-
log.info("WorkerNum {}, avg={} ms/op, throughput={} ops/s", it, avgMs, opsPerSec)
55+
val avgMsStr = String.format(Locale.US, "%.3f", avgMs)
56+
val opsPerSecInt = floor(opsPerSec).toInt()
57+
log.info("WorkerNum {}, avg={} ms/op, throughput={} ops/s", it, avgMsStr, opsPerSecInt)
4758
}
4859
}
4960
}
50-
51-
fun getFixedString(s: String): String {
52-
return entityManager.createNativeQuery("SELECT ?1")
53-
.setParameter(1, s)
54-
.singleResult.toString()
55-
}
5661
}
5762

5863
fun main(args: Array<String>) {

jdbc/spring-test-db/src/main/resources/application.properties

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,6 @@ spring.jpa.properties.hibernate.dialect=tech.ydb.hibernate.dialect.YdbDialect
33
spring.datasource.driver-class-name=tech.ydb.jdbc.YdbDriver
44
spring.datasource.url=jdbc:ydb:grpc://localhost:2136/local
55

6-
workers.count=100
6+
workers.count=100
7+
spring.datasource.hikari.maximum-pool-size=200
8+
spring.datasource.hikari.minimum-idle=100

0 commit comments

Comments
 (0)