ホームページ  >  記事  >  バックエンド開発  >  Go SQLCMD は Windows ネイティブ バージョンよりも遅いですか?

Go SQLCMD は Windows ネイティブ バージョンよりも遅いですか?

PHPz
PHPz転載
2024-02-08 23:57:09405ブラウズ

Go SQLCMD 比 Windows 原生版本慢吗?

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 サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。