php エディタ Xiaoxin さんは、データベースの管理と操作に SQLCMD ツールをよく使用しますか? Windows ネイティブ バージョンと Go SQLCMD のパフォーマンスの違いを比較したことがありますか?このような質問がある場合は、今日はこのトピックについて話し合いましょう。この記事では、これら 2 つのバージョンのパフォーマンスを比較し、Go SQLCMD がネイティブ Windows バージョンよりも遅いかどうかについて答えを示します。見てみましょう!
Windows ローカルの sqlcmd
を使用して、ローカル SQL Server データベースでスクリプトを実行しています。データベースの作成、テーブルとインデックスの追加、ドメイン データの入力、ストアド プロシージャの追加などを行う一連のスクリプト ファイルがあります。スクリプトの実行は、ファイルごとに 1 つの sqlcmd -i <file>.sql
を実行することによって行われます。これはうまく機能し、十分に高速です。
sqlcmd
の新しい Go 実装に切り替えた後、データベースの構築時間は数倍遅くなります。
sqlcmd
からタイミング タイプの統計を取得して、それが接続の問題なのか、接続プーリングなのか、それとも他のものなのかを判断する方法が見つかりませんでした。追加の -i <file.sql>
オプションとして複数のファイルを渡すと、改善されたように見えることがわかります。これは、これが Go コマンドの起動または最初のデータベース接続の確立のいずれかであることを示しています。問題。 p>
私は、10 個の SQL ファイルを取得し、それらを 10 回の個別の sqlcmd
実行として実行し、また 1 つの sqlcmd
実行としても実行するテストを行いました。これらの 10 個のファイルは、個別の - として機能します。 i
入力ファイル。個々のコマンドには 20 秒かかり、コマンドを組み合わせると 4 秒かかります。したがって、これは起動オーバーヘッドまたは接続オーバーヘッドに問題があるようです。
@siggemannen の提案に従って、AD 資格情報と直接データベース ユーザーを使用して接続をテストしました。 AD 資格情報はデータベースへの直接接続よりもはるかに遅いため、これが私のシナリオで発生している遅さの原因であることを意味します。
問題を解決したり、さらにトラブルシューティングを行ったりするための提案やアイデアを探しています。 AD 認証を高速化する方法はありますか?
Go sqlcmd
はネイティブ バージョンよりも遅くありません。 Windows/AD 資格情報を使用して接続を確立すると、接続の確立に必要な起動時間が長くなり、ユースケースの sqlcmd
インスタンスごとに 1 つの SQL ファイルを実行するため、オーバーヘッドが追加されます。
ビルド スクリプトを書き換えて、個々の sqlcmd
ごとに多数の SQL ファイルを実行することで、必要なパフォーマンスを回復できます。ただし、何も手を加えずに使用できる代替方法は、データベースの作成時に作成された SQL Server レベルのプリンシパル sa
を使用することです。これにより、AD ログインを使用したネイティブ sqlcmd
と同等のパフォーマンスが復元されます。
以上がGo SQLCMD は Windows ネイティブ バージョンよりも遅いですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。