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

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

2
SQL Serverで依存外部結合をネストする必要がありますか?
これについてはさまざまな情報を聞きましたが、正規または専門家の意見を期待しています。 複数LEFT OUTER JOINのがあり、それぞれが最後のに依存している場合、それらをネストする方が良いですか? 不自然な例では、JOINすることMyParentに依存JOINするMyChild: http://sqlfiddle.com/#!3/31022/5 SELECT {columns} FROM MyGrandChild AS gc LEFT OUTER JOIN MyChild AS c ON c.[Id] = gc.[ParentId] LEFT OUTER JOIN MyParent AS p ON p.[id] = c.[ParentId] http://sqlfiddle.com/#!3/31022/7と比較 SELECT {columns} FROM MyGrandChild AS gc LEFT OUTER JOIN ( MyChild AS c LEFT OUTER JOIN MyParent …

1
IO_STALLの質問と理解
5分ごとにsys.dm_io_virtual_file_statsからIO_STALLSを収集してから、デルタを実行して、IOの影響を最も受けているファイルを確認しています。 1つの5分の期間で、5826331ミリ秒のデルタ、つまり97分が得られます。 私はこれに少し混乱しています。これは、97分前に開始された操作がその時点で終了し、その待機時間を記録したということですか? ありがとう 要求に応じてコードを追加: /* USE [SysDBA] GO */ /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* DROP TABLE [dbo].[DISKIOPS] GO */ --Create the table /****** Object: Table [dbo].[DISKIOPS] Script Date: 04/07/2013 11:40:15 ******/ /* SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO SET ANSI_PADDING ON GO …

1
奇妙な動作DBCC Shrinkfile
データの95%がアーカイブおよび削除されているデータベースに対して、1 GBのチャンクでdbcc圧縮ファイルを実行しようとしています。9GBがデータ/インデックスである235GBファイルを使用しています。これを50GBに縮小したいと思います。データベースファイルの圧縮は悪いことです。断片化などが発生します。データのパージ/圧縮の一部として、idnexスクリプトを再構築することもできます。 自分のワークステーション(クアッドコア、12GB RAM、2 x SATAドライブ)のデータベースに対してdbcc圧縮ファイルスクリプトを実行すると、圧縮に約8〜10分かかります。 データベースポストデータパージの同じコピーに対して同じコードを実行すると、テスト環境(80以上のコア、128GB RAM、SSD SAN)では、70分かかります。注目すべきは、縮小ファイルの実行時にこのサーバーでアクティビティがほとんどないことです。同じ結果で4回実行されました。 次に、別のアプローチをとり、残りの9GBを別のファイルグループと物理ファイルに移動しました。自分のワークステーションで空の230GBファイルに対してdbccrinkfileを実行して50GBに圧縮すると、1分未満かかります。 これと同じアプローチで、テスト環境では、70分以上かかります。 テスト環境での70分間の実行中に、Brent Ozarのスクリプトに従って前後に待機統計のスナップショットを撮りました。下の上位3行: 秒単位のサンプル時間秒単位のサンプル期間wait_type待機時間(秒)待機数待機あたりの平均ミリ秒 2013-05-28 11:24:22.893 3600 WRITELOG 160.8 143066 1.1 2013-05-28 11:24:22.893 3600 CXPACKET 20.9 13915 1.5 2013-05-28 11:24:22.893 3600 PAGELATCH_EX 11.1 443038 0.0 Windowsイベントログに異常は何も表示されません。私はこの時点でスクラッチに向かっています。スタンドアロンワークステーションと比較して、忍者ハードウェアでこれほど時間がかかるのはなぜですか。

5
楽観的ロックが悲観的ロックよりも速いのはなぜですか?
どちらの形式のロックでも、レコードが別のプロセスで現在使用されている場合、プロセスはレコードの正しいコピーを待機します。悲観的ロックの場合、ロックメカニズムはDB自体(ネイティブロックオブジェクト)から取得されますが、楽観的ロックの場合、ロックメカニズムは、レコードが「古くなった」かどうかを確認するタイムスタンプのような行バージョン管理の一種です。 ただし、どちらも2番目のプロセスがハングします。だから私は尋ねます:なぜ楽観的ロックは一般的に悲観的ロックよりも速く/優れていると考えられていますか?また、楽観よりも悲観が優先されるユースケースはありますか?前もって感謝します!

2
SQL I / O SimとSQL IOツールの違いは何ですか?
ベンチマークツールでさまざまなSQL Serverの代替案をテストしたい。マイクロソフトの2つのツールを見つけました。 SQLIOディスクサブシステムベンチマークツール SQL IO Sim それらの違いは何ですか?同じことですか? ありがとう!

1
Amazon RDS MySQL 5.5 Innodbロック待機タイムアウトを超えました
Amazon RDSに移行して以来、かなりクレイジーなパフォーマンスの問題があり、今日はロックの問題が発生し始めています。そのため、タイムアウトの問題だと思い、使用しているメモリを確認しました。約70MB相当のスワップを行いました。私はmysqltunerを使ってメモリ魔女狩りをしましたが、最大メモリ使用量は約400%と言われていました。Perconaの構成ウィザードのおかげで、今では100%を少し超えています。 ただし、このロックの問題はまだ残っているので、メモリ/スワッピングとは関係がないと思います。それでもロックアウトが発生するのはなぜですか?何が起きてる? 再起動で問題が解決すると確信していますが、それは解決策ではありません。将来これを防ぐために何ができるでしょうか?クエリキャッシュとテーブルをフラッシュしてみましたが、うまくいきました。 RDSのおかげで、他の種類のフラッシュは機能しませんでした:/ 以下に、私が提供できると考えられる豊富な情報を示します。 クエリ INSERT INTO `myTable` (`firstName`, `lastName`, `email`) VALUES ('Travis', 'B...', '...@gmail.com') エラーメッセージ Lock wait timeout exceeded; try restarting transaction テーブルスキーマ CREATE TABLE IF NOT EXISTS `myTable` ( `id` int(15) NOT NULL AUTO_INCREMENT, `firstName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, `lastName` varchar(255) COLLATE utf8_unicode_ci NOT NULL, …

3
mysqlがデータ送信に時間がかかりすぎる
数百万レコード(14,000,000)の単純なテーブルがあり、単純なクエリでは「データの送信」に時間がかかりすぎています。 テーブル CREATE TABLE IF NOT EXISTS details ( id int(11) NOT NULL, date date NOT NULL, time int(2) NOT NULL, minutes_online decimal(5,0) NOT NULL, minutes_playing decimal(5,0) NOT NULL, minutes_chatting decimal(5,0) NOT NULL, minutes_away decimal(5,0) NOT NULL PRIMARY KEY (id,date,time) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci; 簡単なクエリ mysql> SELECT * FROM …

2
数行を巨大なテーブルに挿入するとパフォーマンスが低下する
店舗からデータを取得し、会社全体の在庫表を更新するプロセスがあります。このテーブルには、日付別およびアイテム別のすべてのストアの行があります。多くの店舗を持つ顧客では、このテーブルは非常に大きくなる可能性があり、5億行程度になります。 この在庫更新プロセスは、通常、ストアがデータを入力するときに1日に何度も実行されます。これらの実行は、ほんの数店舗のデータを更新します。ただし、これを実行して、たとえば過去30日間のすべての店舗を更新することもできます。この場合、プロセスは10のスレッドを起動し、各ストアの在庫を別のスレッドで更新します。 お客様から、プロセスに時間がかかっているとの不満が寄せられています。プロセスのプロファイルを作成したところ、このテーブルにINSERTを実行する1つのクエリが予想以上に多くの時間を消費していることがわかりました。このINSERTは、30秒で完了する場合があります。 このテーブルに対してBEGIN TRANとROLLBACKで区切られたアドホックSQL INSERTコマンドを実行すると、アドホックSQLはミリ秒のオーダーで完了します。 パフォーマンスの遅いクエリは次のとおりです。アイデアは、そこにないレコードを挿入し、後でデータのさまざまなビットを計算するときにそれらを更新することです。プロセスの前のステップでは、更新する必要のあるアイテムを特定し、いくつかの計算を行い、結果をtempdbテーブルUpdate_Item_Workに詰め込みました。このプロセスは10個の個別のスレッドで実行されており、各スレッドはUpdate_Item_Workに独自のGUIDを持っています。 INSERT INTO Inventory ( Inv_Site_Key, Inv_Item_Key, Inv_Date, Inv_BusEnt_ID, Inv_End_WtAvg_Cost ) SELECT DISTINCT UpdItemWrk_Site_Key, UpdItemWrk_Item_Key, UpdItemWrk_Date, UpdItemWrk_BusEnt_ID, (CASE UpdItemWrk_Set_WtAvg_Cost WHEN 1 THEN UpdItemWrk_WtAvg_Cost ELSE 0 END) FROM tempdb..Update_Item_Work (NOLOCK) WHERE UpdItemWrk_GUID = @GUID AND NOT EXISTS -- Only insert for site/item/date combinations that don't …

2
ビューの実行プランを取得するにはどうすればよいですか?
いくつかのビューを持つスキーマがあります。実行プランをチェックして、適切なインデックスが配置され、使用されていることを確認する必要があります。 どうすればよいですか? 私はむしろからの出力をコピー&ペーストする必要はないだろうshow create view <viewname>にexplain景色の一部が他のビューの上に構築されている、特にとして、これは非常に苦痛になります。

4
TempDBでのDDL競合
過去数か月間、TempDB DDL競合の問題が発生しているSQL Server 2005 Standard x64があります。サーバーは待機リソース2:1:103(待機タイプはPAGELATCH_EX)で競合が発生します。 この問題は、サーバーに適切な負荷がかかっているときに散発的に発生するようです。私は「破壊用の一時テーブル」のレートを監視しており、2:1:103でPAGELATCH_EXの問題が発生しているときに5,000以上にジャンプする可能性があります。私が読んだことから、このカウンターはほとんどの場合0であるはずですが、私たちのカウンターはほとんどの場合300〜1100のどこかにとどまっているようです。システム上のユーザーが非常に少ない場合にのみ、カウンターは0になります。 干し草のスタックで針を探す必要なしに、tempdbのDDL競合の原因を絞り込むにはどうすればよいですか?

3
多くのSELECT / INSERT / UPDATE / DELETEでのMySQLの高パフォーマンス
私は、すべてのユーザーが10〜300秒間レコードをテーブルに取得するモジュールを作成しています。 時間切れになると、レコードが削除されます。ケースは:多くのユーザーが存在し、レコードは実際に頻繁に変更されます-これはこのテーブルのアプリケーションのパフォーマンスにどのように影響しますか?レコードは非常に頻繁に変更されるため、mysqlはそれで問題ないのでしょうか?インデックスが行き来するように、この特定のテーブルのデータは200回/秒のように変化します。多分私はこの種の仕事のために悪い解決策を選んでいます。助言がありますか ? ありがとうございました!

4
このMySQLクエリをさらに最適化するにはどうすればよいですか?
クエリの実行に非常に長い時間(15秒以上)を要するクエリがあり、データセットが大きくなるにつれて、時間の経過とともに悪化します。私は過去にこれを最適化し、インデックス、コードレベルの並べ替え、その他の最適化を追加しましたが、さらに改良する必要があります。 SELECT sounds.*, avg(ratings.rating) AS avg_rating, count(ratings.rating) AS votes FROM `sounds` INNER JOIN ratings ON sounds.id = ratings.rateable_id WHERE (ratings.rateable_type = 'Sound' AND sounds.blacklisted = false AND sounds.ready_for_deployment = true AND sounds.deployed = true AND sounds.type = "Sound" AND sounds.created_at > "2011-03-26 21:25:49") GROUP BY ratings.rateable_id クエリの目的はsound id、最新のリリースされたサウンドのと平均評価を取得することです。約1500の音と200万の評価があります。 私はいくつかの指標を持っています sounds …

2
Server Management Studioでのクエリプランの表示
SQLサーバーに関する別の質問:カウンターがリセットされて以来、最もCPUを集中的に使用するSQLを提供する簡単なクエリがあります。 select top 10 sum(qs.total_worker_time) as total_cpu_time, sum(qs.execution_count) as total_execution_count, qs.plan_handle, st.text from sys.dm_exec_query_stats qs cross apply sys.dm_exec_sql_text(qs.plan_handle) as st group by qs.plan_handle, st.text order by sum(qs.total_worker_time) desc 質問1:正確には何plan_handleですか?Oracleのように、計画のハッシュではないように見えます。発言の計画に変化があった状況を発見したいのでお願いします。 質問2:plan_handleを取得したら、実際の計画に興味があります。だから私は、例えば: select * from sys.dm_exec_query_plan (0x060006001F176406B8413043000000000000000000000000) query_plan列には、クリックするとXMLドキュメントを表示するリンクが表示されます。それをwhatever.sqlplanとしてディスクに保存すると、Windowsでそれをダブルクリックでき、Management Studioで正しく表示されます。きっとこのステップを回避する方法があるに違いない!? 質問3:SET SHOWPLAN_TEXTの昔のように、XMLをテキスト形式に戻す方法はありますか?グラフィカルに表示できるようにしたいが、意味のある方法で差分を自動化したい。 ありがとう!

2
効果的な方法でページングを実装する方法は?
大きな結果セットになるデータベースクエリがあります。データを表示するクライアントはネットワークを介してデータを受信するため、データベースから最初の50件の結果のみを取得してクライアントに送信することにより、転送されるデータの量を最小限に抑えるという考えでした。次に、2番目のページにジャンプして次の50件の結果などを取得する可能性を提供します(例:グーグルが提供するものと同様のもの) 問題は、ページングを実装する効果的な方法は何ですか。mssqlが可能な限りキャッシュを使用し、ページングを変更するたびに同じことが再度実行されないようにしたいと思います。 同時にデータベースをクエリしているクライアントが他にもあります。使用されているSQLエンジン:MS SQL 2005 私の考えは: 準備されたSQLステートメントを使用して、実行プランの共有を確保する ROW_COUNT変数を使用して、必要な行のみを取得します しかし、それは本当に最も効果的な方法でしょうか?または、結果セット全体を取得して、データをクライアントに送信するコードにページングを実装する方が良いと思いますか? ヒントをありがとう! よろしく、トーマス

3
複数のOracleインスタンス—これは良い方法ですか?
私のクライアントの1つが、Oracleのインスタンスが3つあるSolarisマシンに製品のdbを配備しました。したがって、現在、同じマシン上でOracleのインスタンスが4つ実行されています。そして今、パフォーマンスの問題が発生しています。 私は他のインスタンスやマシンにアクセスできず、私が持っているすべてのツールはalert.log、AWR、ADDMです。複数のインスタンスに関連するものがあることはわかっていますが、それを証明することはできません。 それで、私の質問は、あなたは同じような状況を経験しましたか?どのように対処すればよいですか?複数のインスタンスに関連するパフォーマンスの問題の原因を特定するにはどうすればよいですか?

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