Для проекта на Ruby необходимо использовать SQL Server 2008 :-/
Используется адаптер
activerecord-sqlserver-adapter версии 4.1.4 (можно сказать относительно новый).
В отличие от драйвера mysql2 всё работает жутко медленно, хотя SQL Server находится в той же подсети. Где это видано, чтобы обычный INSERT выполнялся итого за
600мс?
Хотя у меня есть некоторое подозрение. Кто-нибудь знает почему каждый INSERT выполняется через "EXEC sp_executesql", да ещё и обворачивается в транзакцию, хотя в коде я этого не просил?
Может, по умолчанию включен какой-то флаг для отладки, который замедляет работу?
D, [2016-12-01T17:08:02.700498 #10570] DEBUG -- : SQL (202.0ms) BEGIN TRANSACTION
D, [2016-12-01T17:08:02.903759 #10570] DEBUG -- : SQL (200.8ms) EXEC sp_executesql N'INSERT INTO [dbo].[channels_mappings] ([channel_id], [project_id], [site_id]) OUTPUT inserted.id VALUES (@0, @1, @2)', N'@0 nvarchar(30), @1 nvarchar(30), @2 nvarchar(30)', @0 = N'212', @1 = N'34', @2 = N'97' [["channel_id", 212], ["project_id", 34], ["site_id", 97]]
D, [2016-12-01T17:08:03.106695 #10570] DEBUG -- : SQL (202.1ms) COMMIT TRANSACTION
D, [2016-12-01T17:08:03.206572 #10570] DEBUG -- : ChannelsMapping Load (98.2ms) EXEC sp_executesql N'SELECT TOP (1) [dbo].[channels_mappings].* FROM [dbo].[channels_mappings] WHERE [dbo].[channels_mappings].[channel_id] = 213'
D, [2016-12-01T17:08:03.309404 #10570] DEBUG -- : SQL (101.8ms) BEGIN TRANSACTION
D, [2016-12-01T17:08:03.457383 #10570] DEBUG -- : SQL (147.1ms) EXEC sp_executesql N'INSERT INTO [dbo].[channels_mappings] ([channel_id], [project_id], [site_id]) OUTPUT inserted.id VALUES (@0, @1, @2)', N'@0 nvarchar(30), @1 nvarchar(30), @2 nvarchar(30)', @0 = N'213', @1 = N'34', @2 = N'97' [["channel_id", 213], ["project_id", 34], ["site_id", 97]]
D, [2016-12-01T17:08:03.519507 #10570] DEBUG -- : SQL (61.3ms) COMMIT TRANSACTION
D, [2016-12-01T17:08:03.730075 #10570] DEBUG -- : ChannelsMapping Load (209.3ms) EXEC sp_executesql N'SELECT TOP (1) [dbo].[channels_mappings].* FROM [dbo].[channels_mappings] WHERE [dbo].[channels_mappings].[channel_id] = 214'
D, [2016-12-01T17:08:03.933089 #10570] DEBUG -- : SQL (201.8ms) BEGIN TRANSACTION
D, [2016-12-01T17:08:04.136342 #10570] DEBUG -- : SQL (200.7ms) EXEC sp_executesql N'INSERT INTO [dbo].[channels_mappings] ([channel_id], [project_id], [site_id]) OUTPUT inserted.id VALUES (@0, @1, @2)', N'@0 nvarchar(30), @1 nvarchar(30), @2 nvarchar(30)', @0 = N'214', @1 = N'34', @2 = N'97' [["channel_id", 214], ["project_id", 34], ["site_id", 97]]
D, [2016-12-01T17:08:04.350719 #10570] DEBUG -- : SQL (213.5ms) COMMIT TRANSACTION
Добавленоrequire 'tiny_tds'
c = TinyTds::Client.new(
# ...
)
t = DateTime.now
puts "Started at #{t.to_s}"
puts c.execute("SELECT 1 AS [one]").each
puts "Ended in #{ (DateTime.now - t)*1000.0 }"
c.close
Ended in 0.002353889513888889