0

自分のマシンで (ローカル) としてローカル SQL サーバー インスタンスを実行しています。私は通常のデスクトップ オフィス コンピューター (i5-2400 @ 3.1 GHz 2.85 GB RAM) を使用しています。sqlserver.exe は、タスク マネージャーで 1.5 GB のメモリを使用します。私のマシンでSQL Serverインスタンスを使用してデータセットからテーブルをアップロードし、SQL ServerでデータをクエリしてExcelにダンプするようになりました。そうすることで、SQLサーバーテーブルに8つのテーブルを構築しました。表 opcosourcingweekly には約 40 万行、26 列のようなものがあります...

私の問題は、おそらくSQLサーバーのプロセスのインデックス作成または強制終了に関する設定に関係していると思います。SQL サーバーのローカル インスタンスで単純な削除ステートメントを実行するために、自分のコードがどのようにハングアップするのかわかりません。

以下の ExecuteNonQuery を使用すると、何らかの理由でコードがハングします...コメントアウトして、プログラムを実行し、ローカル Sql Server インスタンスで更新を試みました。 削除する単純なクエリは、SQL Management Studio Express で実行するのに 2 ~ 3 分かかります...なぜ私の SQL Server インスタンスのパフォーマンスが悪いのでしょうか?

以前は、button_click 引数に何かを入れる前は、それほど時間はかかりませんでした...プログラムに datamonthlydump オプションを追加し、プライベート サブを作成する必要がありました...

ローカル マシンで実行しているときに SQL Server を高速化する方法はありますか? 私はすでにいくつかのプログラムを書いていますが、システムがハングするのはこれが初めてです。 Visual Basic でプログラミングしているときに、途中でプログラムを停止して接続を開いたまま にしておくことがある以下のコードのパフォーマンスを向上させる方法を教えてください。ありがとう!

Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BtnSQLImport.Click

    If btnMthly.Checked = True Then
        datadumpmthly()
    ElseIf btnWkly.Checked = True Then
        datadumpwkly()
    End If

End Sub

    Private Sub datadumpwkly()
    Dim connectionstring1 As String = "Data Source=(local); Initial Catalog=master;Pooling=False;Integrated Security=True; "
    Dim connection As SqlConnection = New SqlConnection(connectionstring1)
    connection.Open()
    Dim queryString As String = "delete from dbo.OpCoSourcingweekly"
    Dim dbCommand As New SqlCommand(queryString, connection)
    'dbCommand.CommandText = queryString
    'dbCommand.Connection = connection
    'dbCommand.CommandTimeout = 100000
    'dbCommand.ExecuteNonQuery()

    Using bulkcopy As SqlBulkCopy = New SqlBulkCopy(connectionstring1)
        bulkcopy.DestinationTableName = "OpCoSourcingweekly"
        bulkcopy.BulkCopyTimeout = 10000000

        Try
            bulkcopy.WriteToServer(dataset1.Tables(0))
        Catch ex As Exception
            Dim error1 As String
            error1 = ex.Message
            MsgBox("ERROR: " & error1)
        End Try
        bulkcopy.Close()

    End Using
    'dbCommand.CommandTimeout = 100000
    'queryString = "delete from dbo.OpCoSourcingweekly where [Fiscal Year Week] = '201233'"

    'Dim dbCommand1 As New SqlCommand(queryString, connection)
    'dbCommand1.CommandText = queryString
    'dbCommand1.Connection = connection
    'dbCommand.CommandTimeout = 100000
    'dbCommand.ExecuteNonQuery()

    'queryString = "delete from dbo.OpCoSourcingweekly where [Fiscal Year Week] = '201234'"
    'Dim dbCommand2 As New SqlCommand(queryString, connection)
    'dbCommand2.CommandText = queryString
    'dbCommand2.Connection = connection
    'dbCommand.CommandTimeout = 100000
    'dbCommand.ExecuteNonQuery()
    MsgBox("Done with import to SQL")
    connection.Close()
End Sub

以下を行うことで修正されましたコメントありがとうございます

Private Sub datadumpwkly()
    Dim connectionstring1 As String = "Data Source=(local); Initial Catalog=master; Pooling=False;Integrated Security=True; "
    Using connection As SqlConnection = New SqlConnection(connectionstring1)
        connection.Open()
        Dim queryString As String = "truncate table dbo.OpCoSourcingweekly"
        Using dbCommand As New SqlCommand(queryString, connection)
            dbCommand.CommandText = queryString
            dbCommand.Connection = connection
            dbCommand.CommandTimeout = 100000
            dbCommand.ExecuteNonQuery()

            Using bulkcopy As SqlBulkCopy = New SqlBulkCopy(connectionstring1)
                bulkcopy.DestinationTableName = "OpCoSourcingweekly"
                bulkcopy.BulkCopyTimeout = 10000000

                Try
                    bulkcopy.WriteToServer(dataset1.Tables(0))
                Catch ex As Exception
                    Dim error1 As String
                    error1 = ex.Message
                    MsgBox("ERROR: " & error1)
                End Try
                bulkcopy.Close()

            End Using
            dbCommand.CommandTimeout = 100000
        End Using
        queryString = "delete from dbo.OpCoSourcingweekly where [Fiscal Year Week] = '201233'"

        Using dbCommand1 As New SqlCommand(queryString, connection)
            dbCommand1.CommandText = queryString
            dbCommand1.Connection = connection
            dbCommand1.CommandTimeout = 100000
            dbCommand1.ExecuteNonQuery()
        End Using

        queryString = "delete from dbo.OpCoSourcingweekly where [Fiscal Year Week] = '201234'"
        Using dbCommand2 As New SqlCommand(queryString, connection)
            dbCommand2.CommandText = queryString
            dbCommand2.Connection = connection
            dbCommand2.CommandTimeout = 100000
            dbCommand2.ExecuteNonQuery()
        End Using
        MsgBox("Done with import to SQL")
        connection.Close()
    End Using
End Sub
4

2 に答える 2

1

テーブル全体の削除を高速化する 1 つの方法は、TRUNCATE TABLEコマンドを使用することです。

これを使用するには (外部キーに関連する) 制限がありますが、使用できる場合は非常に高速です。

于 2012-07-19T15:59:03.210 に答える