One of the features I was asked to implement for WorkloadTools is the ability to replay commands to a database name different from the one recorded in the source workload.
This is something that I had been planning to implement for a while and it totally makes sense. Usually, you have two identical environments for the workload capture and replay, both with the same databases. Sometimes it makes sense to have two different databases as the source and target for the workload, for some particular reasons: resources constraints, ease of testing and so on.
WorkloadTools now supports replaying commands to a different database, using the DatabaseMap
property of the ReplayConsumer
.
DatabaseMap
is a Dictionary
of strings, so it can be expressed in the .json file as a key/value pair, where the key is the original database and the value is the new target database for the command.
Here is an example:
{ "__type": "ReplayConsumer", "ConnectionInfo": { "ServerName": "somedatabase.database.windows.net", "DatabaseName": "mario", "UserName": "itsame", "Password": "itsamario" }, "DatabaseMap": { "Mario": "Luigi", "Peach": "Bowser" } }
In this case, whenever a command from the database “Mario” is found, it is replayed against the database “Luigi”. Similarly, when the database “Peach” is found, the command gets replayed on “Bowser”.
Please note that DatabaseMap
only changes the database context and does not substitute any reference to the original database name in the code. For instance, if you had something like EXEC Mario.sys.sp_executesql 'SELECT 1'
,this would not be intercepted by DatabaseMap
and would remain unchanged in your code.
Happy benchmarking with WorkladTools!