タグ付けされた質問 「performance」

システムが目的に適合するほど十分に機能するかどうかの評価。通常、パフォーマンスとは、システムが1つの操作または一連の操作を時間の経過とともに完了する速度を指します。

1
SQL Server 2008R2での統計の自動更新:多数の行の挿入にもかかわらず、一部の統計が古くなっているのはなぜですか?
遅いクエリの調査中に、実行プランが非常に最適ではないように見えました(推定実行回数が1であるシークの900万回の実行をネストしたループ)。実際に古くなっているいくつかの関連する統計を確認したので、統計を再構築し、パフォーマンスの問題が効果的に解決されました。 このデータベースでは、統計の自動更新が有効になっています(デフォルトでオン)。20%+ 500行の変更(更新/挿入/削除)に基づく自動統計更新のしきい値があることを理解しています。このしきい値は、複数のインデックスで大幅に超えているようです。そのため、(A)自動更新に問題があるか、(B)オンラインで見つけた以上の更新方法があります。ドキュメンテーション。 統計を更新するようにスケジュールされたタスクを設定できることを感謝します。これは他の解決策が見つからない場合に採用するアプローチである可能性が高いですが、そのような大量の変更によってトリガーされない理由について混乱します一部の統計情報の自動更新-スケジュールされたタスクで更新する必要がある統計情報を判断するのに役立つ理由を理解する。 追加のメモ: 1)この問題は、負荷テストによってデータが作成されており、大量のデータが短時間で追加されるデータベースで指摘されたため、自動更新が定期的に(たとえば、1日に1回)発生した場合ほとんどの場合、これにより、観察された動作の一部が説明される場合があります。また、負荷テストはデータベースに大きな負荷をかける傾向があるため、負荷が高いときにSQLが統計の更新を延期しているのでしょうか(その後、何らかの理由で統計が更新されていません)。 2)連続するINSERT、SELECT、およびDELETEステートメントを含むテストスクリプトでこの問題を再現しようとすると、問題は発生しませんでした。ここでの違いは、これらのステートメントがそれぞれSQLステートメントごとの多くの行に影響を与えるのかどうか疑問に思っていますが、負荷テストスクリプトは行を個別に挿入する傾向があります。 3)問題のDBは、「単純」復旧モデルに設定されています。 いくつかの関連リンク: 実行時間の遅いクエリを分析するためのチェックリスト 統計を使用してクエリのパフォーマンスを向上させる 私はマイクロソフトコネクトを介してこの問題を提起しました: 統計の自動更新:多くの統計が古くなっています 2011年6月30日更新: さらなる調査では、しきい値レベル(たとえば、500行+ 20%)を超えて古くなっている統計は、問題のあるクエリで使用されていない統計であるため、クエリを実行すると更新される可能性がありますそれらを必要とします。クエリで使用される統計情報は、定期的に更新されています。残りの問題は、比較的少数の挿入(たとえば、推定数が1だった場合に前述の900万個程度のシークを引き起こす)の後で、これらの統計がクエリプランオプティマイザーに著しく誤解を与えることです。 この時点で私の問題は、問題は主キーの選択の不備に関連していることです。キーはNEWID()を使用して作成された一意の識別子であり、これにより非常に迅速にフラグメント化されたインデックスが作成されます-特にSQLのデフォルトのフィルファクターとしてサーバーは100%です。私の直感は、比較的少ない行の挿入後、どういうわけか統計の誤解を招く結果になり、統計を再計算するためのしきい値を下回ることです。インデックスを途中で再構築せずに大量のデータを生成したので、これはおそらく問題ではない可能性があります。したがって、不十分な統計は、結果として生じる非常に高いインデックスの断片化の結果である可能性があります。SQL Serverのメンテナンスサイクルを負荷テストに追加して、長期間にわたる実際のシステムのパフォーマンスをよりよく理解する必要があると思います。 更新2012-01-10: 考慮すべきもう1つの要素。SQL Server 2005に2つのトレースフラグが追加され(2008年にも引き続き存在するようです)、古い統計情報や誤解を招く統計情報の発生に関連する特定の欠点に対処します。問題のフラグは次のとおりです。 DBCC TRACEON(2389) DBCC TRACEON(2390) MSDN:Ian JoseのWebLog:昇順のキーと 昇順の列での自動クイック修正統計統計、Fabiano Amorim これらのフラグが有害な影響を与える可能性があるため、これらのフラグを有効にすることを決定するときはもちろん、非常に注意する必要があります。

2
MySQL 5.1 InnoDB構成/ 24GB RAM-bi-xeon高負荷
現在300〜600人の同時ユーザーがいる(そして成長している)Facebookアプリを実行しています。ハードウェアを成長させる準備をするために、i7 / 12GB RAM / 2x 80GB Intel X25 SSD(Debian 5.0 / MySQL 5.0 / 64bit)をBi-Xeon / 24GB RAM / 2X 120GB Intel Intel ssd(UBUNTU 10.10 / MySQL 5.1 /)に変更しました64ビット)。 今、私はパフォーマンスが「小さい箱」よりも悪いという問題に直面しています。両方のサーバーで、コンテンツを提供するためにnginx / php fcgiを使用しています。 私はinnodbのみを使用しており、読み取り/書き込みは約65%/ 35%です。約800-1000 qpsですが、すべてのクエリは単純で、2つ以上の追加テーブルに参加することはありません。すべてのインデックスが設定され、個別のクエリは低速ログ(> 2秒)に記録されません。現時点では、毎月2倍になると予想している約400MBのデータ(インデックス付きで約1GB)があります。 私はそれをよりスムーズに実行するために何を変えるべきかについてのヒントを私に与えることができる皆を崇拝します。 i7ボックスの古い構成はこのようなもので(myisamとinnodbの混合)、800以上のユーザーまではかなり良好に機能しました。 古いmy.cnf key_buffer = 3000M max_allowed_packet = 128M thread_stack = 192K …

4
大きなテーブルでの結合の最適化
2億5000万件のレコードを持つテーブルにアクセスしているクエリからさらにパフォーマンスを引き出そうとしています。実際の(推定ではない)実行プランを読んだところ、最初のボトルネックは次のようなクエリです。 select b.stuff, a.added, a.value from dbo.hugetable a inner join #smalltable b on a.fk = b.pk where a.added between @start and @end; 関連するテーブルとインデックスの定義については、下を参照してください。 実行計画は、ネストされたループが#smalltableで使用されていること、およびhugetableに対するインデックススキャンが480回(#smalltableの各行に対して)実行されていることを示しています。これは私には逆に思えるので、代わりにマージ結合を使用するように強制しようとしました: select b.stuff, a.added, a.value from dbo.hugetable a with(index = ix_hugetable) inner merge join #smalltable b with(index(1)) on a.fk = b.pk where a.added between @start and @end; …

3
MS SQL Serverのバージンクエリのパフォーマンスを向上させる方法は?
ASP.NET Webサイトで、独自の独立したデータキャッシュを実行し、データが長期間変化しないため、同じクエリでSQL Serverに2回クエリする必要がありません。そのSQL Serverへの初回(バージン)クエリのパフォーマンスを改善する必要があります。一部のクエリは、SQL Serverが使用する可能性のある大量のデータを処理しますtempdb。一時テーブル変数や一時テーブルは使用しないので、SQL Serverはtempdb必要なときにいつでもそれ自体を使用することにしました。 私のデータベースサイズは16Gbですが、サーバーマシンで32Gbの物理RAMを使用できます。 MS SQL Serverのキャッシュ戦略は、同じデータを再度ロードする必要がある場合に、同様のクエリのパフォーマンスを向上させるために、RAMにデータを保持しようとすることを理解しています。さらに、tempdbの代わりに使用可能なRAMを使用して、ディスクアクセスを引き起こさずにパフォーマンスを高速化しようとします。 tempdb SQL Serverに何かを格納する必要があるクエリが来て、十分なRAMが利用できない場合、SQL Serverには2つの選択肢があると思います。 1)キャッシュされたデータをアンロードし、tempdbの代わりにスペアRAMを使用してディスクの書き込みを回避する 2)今後のクエリのためにキャッシュされたデータを保持し、tempdbの使用を開始します。これにより、ディスクへの書き込みが遅くなります。 この状況でSQL Serverがどのような選択をするかはわかりませんが、最初の(バージン)クエリのパフォーマンスのみを考慮し、同じクエリをSQL Serverに再度送信することはないため、選択#1をしたいと思います。 (私は同様のクエリを送信する可能性があります)。 このシナリオのSQL Serverキャッシュ戦略は何ですか? 新しいクエリのtempdbの回避と2回目のクエリの速度の間で、RAMの使用量をどのようにバランスさせますか? SQL Serverを選択#1するように構成することは可能ですか?はいの場合、どのように? 他にどのようにしてすべてのバージンSQLクエリのパフォーマンスを向上させることができますか? SQL Serverのキャッシュ戦略がわからないので、データベースをRAMディスクに配置します。これにより、SQL Serverが常に#1を選択する場合でも、キャッシュされていないデータを高速で読み込むことができます。SQL Serverが選択肢#2を選択し続けると、SQL Serverが利用可能なRAMを少なくしてより多くのtempdbを使用し始める可能性があります(RAMディスクに16Gbを使用した後は16Gbしか残りません)tempdb。 SQL 2008 R2のソリューションに興味がありますが、おそらくSQL 2008、SQL 2005でも同じで、SQL 2000かもしれません。 明確化: そのボックスで実行されている他のアプリケーションはなく、SQL Server専用です。ウェブサイトは別のボックスで実行されます。 Windows Server 2008 R2 Enterprise 64ビット上のSQL Server 2008 R2 Standard …

1
一時テーブルにデータをロードするときに最小限のログを取得します
データロードパフォーマンスガイドを読んでも、最小限のログを取得するためにクラスター化インデックスで定義された空の一時テーブルにTABLOCKテーブルヒントを追加する必要があるかどうかはまだわかりません。 一時テーブルは、SIMPLEリカバリモードで動作するTempDBで作成されるのは明らかなので、最小限のロギングの完璧な候補だと思いましたが、確認するための通路が見つかりません。 一時テーブルは最小限のロギングの候補です。そうであれば、永続テーブルに推奨されるTABLOCKヒントを追加する価値はありますか?

1
MySqlサーバーのパフォーマンスが遅い-何を確認する方法
開始:免責事項 私はMySql Server DBAではありません。私はほとんどMSSQLについて知っています。そのため、あなたの助けが必要です。 終了:免責事項 MySqlサーバーエンジンのパフォーマンスが低い理由を確認するように求められました-関連するデータベースを見たことも保持したこともないので、どこから始めればよいか知りたいです。 どこから始めますか? MySqlにアクセスできるユーザーにどのような質問をする必要がありますか。phpmyadminや他のツールを使用しているかどうかもわかりません。 基本的に: どのようなアイテムを要求する必要がありますか。また、提供する各アイテムにどのように応答しますか? 問題がデータベースのパフォーマンスにあるときに要求する重要な項目は何ですか? MSSQL sp_who2で既存の接続をチェックして、何かがブロックされているかどうかを確認できますが、mysqlの対応は何ですか?*各アイテムにはさまざまな種類の結果が存在する可能性があるため、具体的である必要はありませんが、ユーザーに影響を与えているため、ボールが回転するのを手助けしたいと思います。

2
切り捨て/大きな挿入の後にインデックスを再構築する必要がありますか?
(他のテーブルのデータ、計算などに基づいて)新しいデータを挿入する前に、約175万行のテーブルを切り捨てるストアドプロシージャがあります。 基本的なアウトラインは非常に簡単です: テーブルを切り捨て 1回あたり約75,000の「バッチ」に175万行を挿入します。 このプロセスでいつでも明示的にインデックスを再構築する必要があるかどうか疑問に思っていますか?例えば テーブルを切り捨て ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似の何か] 175万行挿入 多分 ALTER INDEX ALL ON xxx DISABLE テーブルを切り捨て 175万行挿入 ALTER INDEX ALL ON xxx REBUILD WITH (FILLFACTOR=90) [または類似の何か] どんな支援も感謝します... DBAではなく-DBをかなりよく知っている開発者はより正確です!

1
巨大なテーブルにシリアル列を追加する最も効率的な方法
BIGSERIAL列を巨大なテーブルに追加する最も速い方法は何ですか(〜3 Bil。行、〜174Gb)? 編集: 列を既存の行の増分値にしたい(NOT NULL)。 フィルファクターを設定しませんでした(振り返ってみると、これは悪い決定のように見えます)。 ディスク容量に問題はありません。できるだけ高速にしてください。


2
SQL Server 2016の高アイドルCPUとクエリは非常に遅い
テスト用に、WinServer2012R2とSQL Server Express 2016を10日以上前にインストールしました。私はこのマシンの唯一のユーザーです。SQL Server 2005の.bakが250MB以下のデータベースは問題なく復元されます。マシンの再起動後、プロセス「SQL Server NT-64ビット」は0%のCPUを使用します。 数分または数時間後、SSMSのCPU使用率 "SQL Server NT-64ビット"からの単純なクエリ(更新/挿入なし!)が突然15%に急上昇し、アイドル状態でもそこにとどまります。その時点から、通常1秒もかからないクエリは、突然2分かかります。実際のクエリ中、CPU使用率は増加しません。この状態では、サーバーは実質的に使用できなくなります。 SQL Serverプロファイラーの接続のみに30秒以上かかります。自分のクエリ以外に、SQLServerCEIP / SQLTELEMETRYからのクエリはごくわずかしかありません(1分あたり最大3つ)。 SQL-Serverを再起動しても解決しません。CPU使用率は15%に戻ります。時間後でもSQL-Serverは回復しません。マシン全体を再起動するだけで問題が解決します。 これは「すぐに使える」インストールなので、小さなデータベースしかなく、クエリはほとんどなく、ユーザーとしての私だけで、おそらくロックはありません。通常のSQL-Serverパフォーマンスの問題に関する多くの記事は、多くのことについて語っていますここでは実際には適用されません。SQL-Serverはようだ独占的にいくつかの内部タスクに集中したいです。 これは、2 GBのRAMと2 GHzのデュアルXeonを備えた仮想マシンです。私はそれにVS2016も搭載しており、非常に高速です。ウイルス対策も、Windows Defenderもありません。もうここで遅れました。明日はsp_whoisactiveを試します。SQL-Serverは何をしているのだろうと本当に思っています... 1 GBの以前のマシンでは、同じDBがSQLServer2005の下で10年間問題なく動作しました... 私はSQLプロファイラーのエキスパートではありません。どこから探したらいいですか?

1
リンクされたSQL Serverにはどのような大きな制限が予想されますか?
当社の製品は、Microsoft SQL Serverに基づいています。現在、3つのデータベースを使用しており、常に1つのSQL Serverインスタンスに展開しています。 3つのデータベースは、OLTP、OLAP、および監査です。OLAPデータベースには、クロスデータベースクエリを使用して、OLTPと監査の両方からのEODに関する大規模な受信データがあります。 ご質問 これらの3つのデータベースを単一の物理サーバー内の3つの別々のStandard Edition インスタンスに展開し、SQL Serverのリンクサーバー機能を使用してそれらをバインドするとします。 アプリケーションコードに対してどの程度透過的ですか?どのくらいの変化を期待できますか? OLAPへのインバウンドデータの量は5万〜10万行で、EODあたりのペイロードは200〜500 MBでした。どのくらいのパフォーマンス低下が予想されますか? 他にどんな大きな制限を期待する必要がありますか? バックグラウンド 現在、最初の潜在的なクライアントを500人以上の同時ユーザーに売り込んでいます。 64コアと256GB RAMを含むサーバー仕様を作成しています。SQL Serverがこれらの豊富なリソースをすべて利用するには、クライアントはEnterprise Editionを購入する必要があります。EnterpriseEditionは、SQL Server 2016ではコア単位のライセンスでのみ利用できます。 ライセンス費用だけ(64 x $ 7400)でそれらが下がることを恐れています。したがって、データベースをStandard Editionの3つのインスタンスに分割し、それらをリンクして、リンク機能がアプリケーションコードから透過的になることを期待しています。

2
SQL実行プランのTOPオペレーションはなぜですか
しばらく探してみたところ、答えが見つからなかったためこの質問を投稿し、似たような質問/回答があった場合は謝罪することにしました。 同じように設定された2つのSQLサーバーで以下のクエリを実行すると、パフォーマンスに影響する異なる実行プランが発生するため、原因を特定する必要があります。 クエリ: SELECT process_id INTO #temp FROM revrep_revenue_fact WHERE process_id = 284 DROP TABLE #temp サーバーAの実行計画 サーバーBの実行計画 サーバーB http://s2.postimg.org/z9fjrfv4n/server_B.png サーバーBの実際の実行計画ではTOPの物理演算があり、その理由を理解しようとしていることがわかります。両方のクエリは、インデックスシークで同じインデックスを使用します。 サーバーAとサーバーBの詳細は次のとおりです サーバーAとBは両方とも Windows Server 2008 R2 Standard Service Pack 1 24GB RAM 64ビットオペレーティングシステム (SELECT SERVERPROPERTY( 'ProductVersion'))を使用して取得したSQL Server 2012のバージョン サーバーA SQLバージョン11.0.3000.0 サーバーB SQLバージョン11.0.5058.0 私たちが試したこと プロシージャキャッシュのクリア インデックスの再構築 統計の更新 行カウントを0に設定 サーバーBの実行プランにTOPがあるのはなぜですか?この単純なクエリの例では実際の問題はありませんが、大きなクエリではTOPのコストが上昇し、パフォーマンスに影響が出ます。これをデバッグする助けがあれば大歓迎ですし、私たちはあなたが助ける必要があるかもしれない追加の情報を得ることができます。

2
整数シーケンスが特定のサブシーケンスを含む行を検索します
問題 注:PostgreSQLのシーケンスメカニズムではなく、数学的なシーケンスを参照しています。 整数のシーケンスを表すテーブルがあります。定義は次のとおりです。 CREATE TABLE sequences ( id serial NOT NULL, title character varying(255) NOT NULL, date date NOT NULL, sequence integer[] NOT NULL, CONSTRAINT "PRIM_KEY_SEQUENCES" PRIMARY KEY (id) ); 私の目標は、指定されたサブシーケンスを使用して行を見つけることです。つまり、sequenceフィールドが指定されたサブシーケンスを含むシーケンスである行(私の場合、シーケンスは順序付けされています)。 例 テーブルに次のデータが含まれているとします。 +----+-------+------------+-------------------------------+ | id | title | date | sequence | +----+-------+------------+-------------------------------+ | 1 | BG703 | 2004-12-24 …

2
Postgresに何千人ものユーザーを抱えることは可能ですか?
最大50.000の顧客を持つSAASを作成しています。Postgresデータベースに顧客ごとにユーザーを作成することを検討しています。サービスにログインする各ユーザーをデータベース内のユーザーにマップして、ユーザーが自分のデータにのみアクセスできることを確認します。また、トリガーを利用するこのソリューションによって、監査証跡をデータベースに直接実装したいと考えています。各顧客に独自のデータベースユーザーがいる場合、2人の顧客が同じデータを共有する場合でも、誰が何をしたかを簡単に確認できます。 データベースに50.000人のユーザーがいるため、予期しない問題が発生しますか?パフォーマンス面または管理面。たぶん接続プーリングはもっと難しいでしょうが、私はそれが必要になるかどうか本当に知りません。

1
T-SQL-オプション(FAST x)およびトレースフラグ8722
私は長い間検索してきましたが、それでも私の問題に対する答えが見つかりません。 私たちのDynamics AXは、クエリヒントOPTION(FAST x)でクエリを生成しています。これにより、不適切な実行プランが使用される場合があります。開発者は、それはデフォルトであり、変更するのが難しいと言います(潜在的にすべてのフォームで修正する必要があります)。 したがって、トレースフラグを使用してこれらのヒントを上書きする方法を探していました。SQL Serverに一部のクエリヒント、特にOPTION句のヒントを無視させると主張されている素敵なトレースフラグ8722を見つけました。 ただし、これは私の場合は機能しません。トレースフラグ8602(インデックスヒントを無効にする)も有効にしようとしましたが、クエリはまだFAST xヒントを使用して実行されています(実際にOPTION句を削除する場合よりもはるかに遅くなります)。 プランキャッシュもクリアしようとしましたが、役に立ちませんでした。 何か案は?何か不足していますか? PS私はトレースフラグをグローバルに有効にしました。これはSQL Server 2012 Developerエディションです

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.