2017-07-05 24 views
2

MySQL SELECTクエリの実行後にハングするPowerShellのスクリプトに問題があり、実行に10分以上かかる場合があります。実行時間が長くかかるクエリの後にスクリプトがハングする

$query = "SELECT S.DESCRIPTION, date_format(N.TIMESTAMP, '%H'), count(*) 
    FROM NOTIFICATIONS N, SENDING_TYPE S 
    WHERE N.ID_SENDING_TYPE = S.ID_SENDING_TYPE 
    AND N.TIMESTAMP > date_format ('"+$fecha+"', '%Y%m%d') 
    GROUP BY S.DESCRIPTION, date_format(N.TIMESTAMP, '%H')" 

例 - $fecha="20170630"

私は私の機能でクエリを実行(PowerShellがハングアップするのはここです)

$resultado = Get-QueryMysql -Servidor $MySQLHost -Port $port -UserName $MySQLAdminUserName -Password $MySQLAdminPassword -DataBase $MySQLDatabase -Query $query 

ここで機能Get-QueryMysqlです:

function Get-QueryMysql { 
    [CmdletBinding()] 
    [Alias()] 
    [OutputType([int])] 
    Param(
     # Servidor Mysql 
     [Parameter(Mandatory=$true)] 
     [String]$Servidor, 

     # Puerto Oracle 
     [Parameter(Mandatory=$true)] 
     [String]$Port, 

     # ServiceName 
     [Parameter(Mandatory=$true)] 
     [String]$DataBase, 

     # Usuario 
     [Parameter(Mandatory=$true)] 
     [String]$UserName, 

     # Password 
     [Parameter(Mandatory=$true)] 
     [String]$Password, 

     # Query 
     [Parameter(Mandatory=$true)] 
     [String]$Query, 

     # If Allow zero datetime 
     [Parameter(Mandatory=$false)] 
     [switch]$AllowZeroDateTime, 

     # Reintentos 
     # Query 
     [Parameter(Mandatory=$false)] 
     [int]$Reintentos=10, 

     [switch]$AntiguoMysql 
    ) 

    Begin { 
     # Load the ODP assembly 
     if ($AntiguoMysql.IsPresent) { 
      Add-Type -Path C:\TRABAJO\REPORTES\modules\MySQL\mysql.data.dll -IgnoreWarnings 
     } else { 
      $null = [System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 
     } 
    } 

    Process { 
     # Cadena de conexion 
     $ConnectionString = "server=" + $Servidor + ";port=$port;uid=" + $UserName + ";pwd=" + $Password + ";database=" + $DataBase 

     if ($AllowZeroDateTime.IsPresent) { 
      $ConnectionString = "server=" + $Servidor + ";port=$port;uid=" + $UserName + ";pwd=" + $Password + ";database="+$DataBase+";Allow Zero Datetime=True" 
     } 

     $cont = 0 
     for ($i=0; $i-lt $Reintentos; $i++) { 
      $MysqlConnection = New-Object MySql.Data.MySqlClient.MySqlConnection 
      $MysqlConnection.ConnectionString = $ConnectionString 
      $MysqlConnection.Open() 

      $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $MysqlConnection) 
      $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) 
      $DataSet = New-Object System.Data.DataSet 
      $RecordCount = $dataAdapter.Fill($DataSet, "data") 

      if ($DataSet) { 
       break; 
      } 
     } 
     if (!$dataSet) { 
      Write-Host "ERROR: Conectando a la BBDD" 
      return $null 
     } 

     # Datos obtenidos 
     return $DataSet.Tables[0] 
    } 

    End { 
     # Cerrando Conexiones 
     if ($MysqlConnection) { 
      $MysqlConnection.Close() 
      $MysqlConnection.Dispose() 
     } 
    } 
} 

queryは、タイムスタンプフィールドでフィルタリングするSELECTです。私はテーブルの構造を変更しようとしましたが、本番環境での私の要求は否定されました。だから、私のスクリプトが動作するようにする必要があります。私は長い時間がかかるクエリには問題があります。

script-blockコマンドを試してみましたが、動作しません。

プロセスが実行されているとき、CPUは0.5%と20MBのRAM(インクリメントはありません)にあります。

私はDBMS(Navicat)からクエリを実行すると、それ以上の場合は10分かかります。私はSHOW PROCESSLISTでMySQLデータベースをチェックし、数分後にスクリプトによって実行されたクエリが正常に終了したが、PowerShellスクリプトがハングアップする。


スクリプトは後に次の行を実行ハング:別のコネクタ負荷後

$RecordCount = $dataAdapter.Fill($dataSet, "data") 

を:

[void][system.reflection.Assembly]::LoadFrom("C:\modules\MySQL\6.9.8\mysql.data.dll") 

スクリプトがハングアップしませんが、今それが起こりますエラー例外:

データベース内のタイムアウト変数を見

は、8時間settedさ:

interactive_timeout=28800 
wait_timeout=28800 

SHOW PROCESSLISTコマンドは、接続がSending Data状態であることを示しています。クエリが1分以上...引き継ぐとき

エラー例外

答えて

関連する問題