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

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

7
これらのテーブル設計のうち、パフォーマンスに優れているのはどれですか?
アカウントで収集するための1日のコストを追跡する何かを作成するように求められ、これをサポートするデータベーステーブルスキーマを見つけようとしています。 これが私が知っていることです 会社は250万以上のアカウントを持っています これらのうち、彼らは現在、1か月あたり平均20万人働いています(現在は低い人員配置レベルで変化します) 追跡したい13の異なるコストタイプがあり、将来さらに追加する可能性があると警告しています。 コストを毎日追跡したい コストは在庫全体に分割されません。それらは、1か月あたり働くアカウント数(200,000)に分割されるか、ユーザーがアカウント識別子を入力してアカウントのグループにコストを適用するか、単にコストを適用するアカウントを指定できます。 最初に考えたのは、正規化されたデータベースです。 アカウントID 日付 CostTypeId 量 これに関する私の問題は、数学をすることです。このテーブルはすぐに巨大になります。13のすべてのコストタイプが今月のすべての作業済みアカウントに適用されると仮定すると200k * 13 * N days in month、これは1か月あたり約7500〜8000万レコード、または1年あたり約10億レコードになります。 私の2番目の考えは、それを少し非正規化することでした アカウントID 日付 総費用 CostType1 CostType2 CostType3 CostType4 CostType5 CostType6 CostType7 CostType8 CostType9 CostType10 CostType11 CostType12 CostType13 この方法はより非正規化されており、1か月あたり最大600万レコード(200k * N days in month)、または1年あたり約7,200 万レコードを作成できます。最初の方法よりもはるかに少ないですが、将来会社が新しいコストタイプを決定した場合は、別のデータベース列を追加する必要があります。 2つの方法のうち、どちらがお好みですか?どうして?これをより良く処理できると考えられる別の選択肢はありますか? 私は、要約レポートと詳細レポートの両方のパフォーマンスのレポートに最も興味があります。アカウントに費用を配分するジョブは、誰もいないときに夜間に実行されます。二次的な懸念は、データベースのサイズです。既存のデータベースはすでに約300 GBであり、ディスク上のスペースは約500 GBであると思います。 データベースはSQL Server …

2
時折クエリが遅くなる理由は?
Windows Server 2008 R2でMySQL 5.1を実行しています。 私たちは最近データベースでいくつかの診断をしていて、説明できないいくつかの邪魔なアーティファクトを見つけました。長時間(> 2000ミリ秒)のクエリがある場合にログにコードを追加しました。結果は驚くべきものでした(そして、おそらくデッドロックの説明)。 通常、非常に短い時間(10ミリ秒未満)で実行されるクエリには、4〜13秒かかります。明確にするために、これらは絶えず(1秒間に数回)実行されているクエリであり、これらのクエリの時間スパイクに悩まされていません。 明らかな間違いを探すためにインデックスを調べましたが、あまり運がありませんでした。 更新 ピープルテーブル: | people | CREATE TABLE `people` ( `people_id` bigint(20) NOT NULL AUTO_INCREMENT, `company_id` bigint(20) NOT NULL, `name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `temp_password` varchar(10) DEFAULT NULL, `reset_password_hash` varchar(255) DEFAULT NULL, `email` varchar(255) DEFAULT NULL, `phone` varchar(32) DEFAULT …

4
SQL Serverは、15秒以上かかるI / O要求の発生を検出しました
実稼働SQL Serverには、次の構成があります。 3台のDell PowerEdge R630サーバーを可用性グループに統合3台すべてがRAIDアレイである単一のDell SANストレージユニットに接続されている 時々、PRIMARYで次のようなメッセージが表示されます。 SQL Serverは、データベースID 8 のファイル[F:\ Data \ MyDatabase.mdf]で完了するのに15秒以上かかるI / O要求が11回発生しました。OSファイルハンドルは0x0000000000001FBCです。 最新の長いI / Oのオフセットは0x000004295d0000です。 長いI / Oの継続時間は37397ミリ秒です。 パフォーマンストラブルシューティングの初心者です ストレージに関連するこの特定の問題のトラブルシューティングで最も一般的な方法またはベストプラクティスは何ですか?このようなメッセージの根本原因を絞り込むには、どのパフォーマンスカウンター、ツール、モニター、アプリなどを使用する必要がありますか?役立つ可能性のある拡張イベント、または何らかの種類の監査/ログがありますか?

3
特定のインスタンスのデータベースによるCPU使用率を取得する方法は?
データベースごとのCPU使用率を検出する次のクエリを見つけましたが、異なる結果が表示されています。 WITH DB_CPU_Stats AS ( SELECT DatabaseID, DB_Name(DatabaseID) AS [DatabaseName], SUM(total_worker_time) AS [CPU_Time_Ms] FROM sys.dm_exec_query_stats AS qs CROSS APPLY ( SELECT CONVERT(int, value) AS [DatabaseID] FROM sys.dm_exec_plan_attributes(qs.plan_handle) WHERE attribute = N'dbid') AS F_DB GROUP BY DatabaseID ) SELECT ROW_NUMBER() OVER(ORDER BY [CPU_Time_Ms] DESC) AS [row_num], DatabaseName, [CPU_Time_Ms], CAST([CPU_Time_Ms] * 1.0 …

6
2008より遅いSQL Server 2012
古いサーバー(Windows 2008 / SQL Server 2008/16 GB RAM / 2 x 2.5 GHzクアッドコア/ SASディスク)から大規模なWebサイトとデータベースを、より優れた新しいサーバー(Windows 2008 R2 / SQL Server 2012 SP1 / 64 GB RAM / 2 x 2.1 GHz 16コアプロセッサ/ SSDディスク)。 古いサーバーのデータベースファイルをデタッチし、新しいサーバーにコピーして添付しました。すべてがうまくいきました。 その後、互換性レベルを110に変更し、統計を更新し、インデックスを再構築しました。 残念ながら、新しいSQL 2012サーバーでは、ほとんどのSQLクエリが古いSQL 2008サーバーよりもはるかに遅い(2-3-4倍遅い)ことに気付きました。 たとえば、約70万件のレコードがあるテーブルでは、古いサーバーではインデックスのクエリに約100ミリ秒かかりました。新しいサーバーでは、同じクエリに約350ミリ秒かかります。 すべてのクエリで同じことが起こります。 ここで助けていただければ幸いです。チェック/検証する内容を教えてください。新しいSQL Serverを搭載した優れたサーバーではパフォーマンスが低下すると信じるのは非常に難しいためです。 詳細: メモリは最大に設定されています。 私はこのテーブルとインデックスを持っています: CREATE TABLE [dbo].[Answer_Details_23]( [ID] [int] IDENTITY(1,1) …

4
大きなインデックスのINCLUDEフィールドはシステムパフォーマンスにどのように影響しますか?
この質問は、とSQL Serverのインデックスのパフォーマンスについてですvarchar(2000)としてINCLUDEの被覆指数インチ 低速で不安定なデータベースアプリケーションのパフォーマンスを改善しようとしています。いくつかのケースでは、データのようなmultple文字列操作を含むクエリで、大VARCHAR列を介してアクセスされるSUBSTRING()、SPACE()とDATALENGTH()。アクセスの簡単な例を次に示します。 update fattable set col3 = SUBSTRING(col3,1,10) + '*' + SUBSTRING(col3,12,DATALENGTH(col3)-12) from fattable where substring(col3,10,1) = 'A' and col2 = 2 スキーマは次のようになります。 CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... 次のインデックスが定義されており、大きなテキスト列にカバーフィールドがあります。 CREATE NONCLUSTERED INDEX [IndexCol2Col3] …

5
行を返さないクエリにORDER BYを含めると、パフォーマンスに大きく影響します
単純な3つのテーブルの結合を考えると、行が返されない場合でもORDER BYを含めると、クエリのパフォーマンスが大幅に変わります。実際の問題シナリオでは、ゼロ行を返すのに30秒かかりますが、ORDER BYが含まれていない場合は即座に発生します。どうして? SELECT * FROM tinytable t /* one narrow row */ JOIN smalltable s on t.id=s.tinyId /* one narrow row */ JOIN bigtable b on b.smallGuidId=s.GuidId /* a million narrow rows */ WHERE t.foreignId=3 /* doesn't match */ ORDER BY b.CreatedUtc /* try with and without this ORDER …

5
最初からインデックスを作成するか、パフォーマンスの問題が発生したとき?
私の質問は、インデックスの使用に関するものです。 最初から、またはパフォーマンスの問題が発生したときに、インデックス作成を開始する必要がありますか? クエリの実行中に一時インデックスを作成することもできます。そのような技術の長所と短所は何ですか?

10
SQL Serverで発生するパフォーマンスの上位3つの問題は何ですか?
私はアイントホーフェンのフォンティス大学の学生です。現在、SQL Serverツールの開発を支援するために一連のインタビューを実施しています。この分野の専門家からフィードバックをもらいたいと思います。 私の質問の1つは次のとおりです。 SQL Serverインスタンスで発生する上位3つのパフォーマンスの問題と、それらの問題の特定方法を教えてください。 特に、これを測定するために使用されるスクリプトとツールに興味があります。

4
CHARとVARCHAR(Postgres)のインデックスパフォーマンス
この答え(/programming/517579/strings-as-primary-keys-in-sql-database)で、1つの発言が目を引きました: また、インデックスの比較を行うとき、CHARとVARCHARの間に非常に大きな違いがあることが多いことに留意してください これはPostgresに適用されますか? OracleのページCHARは多かれ少なかれエイリアスであるVARCHARと主張しているため、インデックスのパフォーマンスは同じですが、Postgresで決定的なものは何も見つかりませんでした。


2
SQL Server 2016と2012の挿入パフォーマンス
同じサーバーに2つのSQL Serverインスタンスがあります。 Microsoft SQL Server 2012(SP1)-11.0.3000.0(X64)Standard Edition(64ビット) Microsoft SQL Server 2016(SP1-CU5)(KB4040714)-13.0.4451.0(X64)Enterprise Edition(64ビット) sp_configureの結果は、両方のインスタンスで同じです(新しい2016オプションを除く)。 同じディスクフォルダーの両方のインスタンスに新しいデータベースを作成しました。自動成長パラメータは同じです。 統計の自動作成および自動更新オプションはオフになっています。 次に、10000の挿入をヒープにテストしました。 set nocount on go create table dbo.TestInsert ( i int not null, s varchar(50) not null ) declare @d1 datetime, @d2 datetime, @i int set @d1 = getdate() set @i = 1 while @i …

1
INSERTでWITH TABLOCKを使用する利点
状況INSERT INTO <tablename> (WITH TABLOCK)によっては、ロギングが最小限であるため、実行が高速になります。これらの状況には、BULK_LOGGED復旧モデルにデータベースを含めることが含まれます。 データベース(tempdb)が復旧モデルを使用しているときに、空のテーブルで使用することWITH TABLOCKでパフォーマンス上の利点は他INSERTにありますか?SIMPLE SQL Server 2012 Standard Editionを使用しています。 私のユースケースは、を使用してストアドプロシージャ内に一時テーブルを作成し、すぐにデータを取り込むINSERT...SELECTことです。私はそのようなtempdbの乱用を避けようとしますが、時々必要になります。 私は必要なケースを構築しようとしていますTABLOCK。それは何も傷つけないようで、利益があるかもしれません。コードベースのどこにでもそれを追加するのに十分な潜在的な利点があるかどうかを把握しようとしています。テーブルに書き込みたい他のプロセスがないと確信しています。 通常、クラスター化されたPKで新しく作成されたローカル一時テーブルに挿入しますが、時々ヒープを使用します。

1
列のインデックスを作成するときに、このsqliteクエリがはるかに遅いのはなぜですか?
(偽の)人の名前を含む、それぞれ50,000行の2つのテーブルを持つsqliteデータベースがあります。両方のテーブルに共通する名前(名前、ミドルネームのイニシャル、姓)がいくつあるかを調べる簡単なクエリを作成しました。 select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial; 主キー以外にインデックスがない場合(このクエリとは無関係)、すぐに実行されます。 [james@marlon Downloads] $ time sqlite3 generic_data_no_indexes.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;" 131 real 0m0.115s user 0m0.111s sys 0m0.004s しかし、各テーブルの3つの列にインデックスを追加する場合(全部で6つのインデックス): CREATE INDEX `idx_uk_givenname` ON `fakenames_uk` (`givenname` ) //etc. …

2
1秒未満で発生するブロッキングを追跡する方法-SQL Server
1秒未満で発生するブロッキングの問題をトラブルシューティングしようとしています。OLTPアプリケーションは非常に機密性が高く、合意されたSLAに従って一部のトランザクションの応答時間が200ミリ秒未満である必要があります。新しいコードリリースにはロックエスカレーションの問題がいくつかあり、更新プログラムのバッチサイズを小さくすることで解決できました。バッチサイズが小さい場合でも、新しいspがOLTPトランザクションが更新しているのと同じ行をブロックしていると思われます。 ブロックされているセッションと待機しているリソースを見つける必要があります。私の理解では、「ブロックされたプロセスのしきい値」は最低1秒に設定できるため、ブロックはキャプチャされません。 wait_infoイベントとwait_completed xイベントを試しています。 これを追跡できる他の方法はありますか。ありがとう

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