Массовая запись в базу MS SQL скриптом на Powershell

Массовая запись в базу MS SQL скриптом на Powershell

При тестировании отказоустойчивой конфигурации Microsoft SQL Server 2012 (подробнее: Пошаговое развертывание AlwaysOn - MS SQL 2012) мне нужно было сгенерировать массовую запись данных в базу.

Т.к. я совсем не знаю T-SQL, решил написать небольшой скрипт на Powershell для решения этой задачи.

Нам понадобится:

  • Непосредственно база данных
  • Таблица в ней для службных нужд

  База данных у нас уже должна быть. Можно создать вообще пустую. Теперь создадим таблицу. Схема таблицы такая. Я ее делал вручную через Designer в SQL Server Management Studio.

Массовая запись в базу MS SQL скриптом на Powershell

  • GUID - ключевое поле для данных
  • TIMESTAMP - метка времени записи

Скрипт вот такой. Принимаются два обязательных параметра: общее время работы скрипта и количество запросов INSERT в секунду.

param(	[Parameter(Mandatory=$true)][int] $Duration, 
		[Parameter(Mandatory=$true)][int] $StringsPerSecond
	 );


$conn = New-Object System.Data.SqlClient.SqlConnection("Data Source=ae1-tst-listene.domain.local; Initial Catalog=DAD_TST; Integrated Security=SSPI");
$conn.open();
$cmd = $conn.createcommand();

$start_time = Get-Date;
$end_time = $start_time.AddMinutes($Duration);
$current_time = Get-Date;
$counter = 0;

while ($end_time -gt $iteration_end_time) {
	$iteration_start_time = Get-Date;
	$guid = [guid]::NewGuid();
	
	if ($iteration_start_time.DateTime -gt $current_time.DateTime) {
		$counter = 0;
		echo $current_time.DateTime;
	}
	
	if ($counter -lt $StringsPerSecond -and $iteration_end_time.DateTime -eq $iteration_start_time.DateTime) {
		
		if ($conn.State -eq "Closed") {
			echo "Re-Opening Connection !!!";
			try {
				$conn.open();
			} catch {
				echo "Re-connection error !!!";
			}
		}
		$current_time_string = Get-Date -Format "yyyyMMddHHmmss";
		$current_time = Get-Date;
		$cmd.commandtext = "INSERT [dad_tst] (GUID, TIMESTAMP) VALUES ('$($guid)', $current_time_string)";
		try {
			$result = $cmd.executenonquery();
		} catch {
			echo "Error sending a query !!!";
		}
		$counter++;
	}
	
	$iteration_end_time = Get-Date;
}

$conn.close();

Лучше всего запускать скрипт с компьютера, который находится поближе к серверу, т.к. сетевые задержки достаточно сильно снижают производительность.

На выходе получается вот такая таблица:

Массовая запись в базу MS SQL скриптом на Powershell

 

powershell (ru), скрипт, ms sql server (ru)

  • Просмотров: 5405
Добавить комментарий

Related Articles