Skip to content

Instantly share code, notes, and snippets.

@davidfrey
Created July 1, 2013 17:59
Show Gist options
  • Save davidfrey/5903074 to your computer and use it in GitHub Desktop.
Save davidfrey/5903074 to your computer and use it in GitHub Desktop.
Concurrent database connections using threads and mysqlplus. The following scenario will complete in roughly 3 seconds when db host is local, takes considerably longer on remote connections due to what appears to be blacking after 6 or 7 concurrent connections.
Id User Host db Command Time State Info
1 root localhost:58150 NULL Query 1131598 NULL show processlist
2 root localhost:58151 NULL Sleep 7 NULL
1452 root localhost NULL Query 1 User sleep select sleep(3)
1453 root localhost NULL Query 1 User sleep select sleep(3)
1454 root localhost NULL Query 1 User sleep select sleep(3)
1455 root localhost NULL Query 1 User sleep select sleep(3)
1456 root localhost NULL Query 1 User sleep select sleep(3)
1457 root localhost NULL Query 1 User sleep select sleep(3)
1458 root localhost NULL Query 1 User sleep select sleep(3)
1459 root localhost NULL Query 1 User sleep select sleep(3)
1460 root localhost NULL Query 1 User sleep select sleep(3)
1461 root localhost NULL Query 1 User sleep select sleep(3)
1462 root localhost NULL Query 1 User sleep select sleep(3)
1463 root localhost NULL Query 1 User sleep select sleep(3)
1464 root localhost NULL Query 1 User sleep select sleep(3)
1465 root localhost NULL Query 1 User sleep select sleep(3)
1466 root localhost NULL Query 1 User sleep select sleep(3)
1467 root localhost NULL Query 1 User sleep select sleep(3)
1468 root localhost NULL Query 1 User sleep select sleep(3)
1469 root localhost NULL Query 1 User sleep select sleep(3)
1470 root localhost NULL Query 1 User sleep select sleep(3)
1471 root localhost NULL Query 1 User sleep select sleep(3)
1472 root localhost NULL Query 1 User sleep select sleep(3)
1473 root localhost NULL Query 1 User sleep select sleep(3)
1474 root localhost NULL Query 1 User sleep select sleep(3)
1475 root localhost NULL Query 1 User sleep select sleep(3)
1476 root localhost NULL Query 1 User sleep select sleep(3)
1477 root localhost NULL Query 1 User sleep select sleep(3)
1478 root localhost NULL Query 1 User sleep select sleep(3)
1479 root localhost NULL Query 1 User sleep select sleep(3)
1480 root localhost NULL Query 1 User sleep select sleep(3)
1481 root localhost NULL Query 1 User sleep select sleep(3)
1482 root localhost NULL Query 1 User sleep select sleep(3)
1483 root localhost NULL Query 1 User sleep select sleep(3)
1484 root localhost NULL Query 1 User sleep select sleep(3)
1485 root localhost NULL Query 1 User sleep select sleep(3)
1486 root localhost NULL Query 1 User sleep select sleep(3)
1487 root localhost NULL Query 1 User sleep select sleep(3)
1488 root localhost NULL Query 1 User sleep select sleep(3)
1489 root localhost NULL Query 1 User sleep select sleep(3)
1490 root localhost NULL Query 1 User sleep select sleep(3)
1491 root localhost NULL Query 1 User sleep select sleep(3)
gem 'activerecord', '=3.0.5'
require 'active_record'
require 'mysqlplus'
class Mysql; alias :query :async_query; end
CONNECTIONS = 40
THREADS = 40
ActiveRecord::Base.establish_connection(
adapter: 'mysql',
host: 'localhost',
username: 'root',
pool: CONNECTIONS
)
threads = []
THREADS.times do |n|
threads << Thread.new do
ActiveRecord::Base.connection_pool.with_connection do |connection|
result = connection.execute('select sleep(3)')
end
end
end
threads.each {|t| t.join}
Id User Host db Command Time State Info
5 root localhost:54499 NULL Sleep 7 NULL
7 root remote:57616 root Query 0 NULL show processlist
8 root remote:57617 NULL Sleep 43 NULL
191 root remote:59084 root Sleep 10 NULL
192 root remote:59085 root Sleep 9 NULL
193 root remote:59086 root Sleep 8 NULL
194 root remote:59087 root Sleep 7 NULL
195 root remote:59088 root Sleep 6 NULL
196 root remote:59089 root Sleep 5 NULL
197 root remote:59090 root Sleep 4 NULL
198 root remote:59091 root Sleep 4 NULL
199 root remote:59092 root Query 2 User sleep select sleep(3)
200 root remote:59093 root Query 1 User sleep select sleep(3)
201 root remote:59094 root Sleep 1 NULL
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment