読者です 読者をやめる 読者になる 読者になる

都内で働くSEの技術的なひとりごと

都内でサラリーマンやってます。マイクロソフト系(たまに、OSS系などマイクロソフト以外の技術も...)の技術的なことについて書いています。日々の仕事の中で、気になったことを技術要素関係なく気まぐれに選んでいるので記事内容は開発言語、インフラ等ばらばらです。なお、当ブログで発信、発言は私個人のものであり、所属する組織、企業、団体等とは何のかかわりもございません。ブログの内容もきちんと検証して使用してください。よろしくお願いします♪

SQL Server のチューニングについてまとめてみる - その21 - ( あるプロジェクト向けに書いてみた )

最近、SQL Server の診断をする機会が増えてきています。時間がない中でやっていることもあり、超簡易診断しかできていませんが....その方法について説明します。 データベースを作成します。 とりあえず 2G くらいにしておきましょう。 データベースが作成…

SQL Server のチューニングについてまとめてみる - その20 - ( きちんとパラメータ化してみる )

本日、大阪に来ています。天気は良くありません。お昼から雨のようですね。 色々なシステムの SQL Server に関するレビューをしていると、まだまだパラメータ化されていないクエリが多数存在します。それによる影響としては、 クエリのパターンが毎回変化す…

SQL Server のチューニングについてまとめてみる - その19 - ( プランがちゃんと再利用されているか確認してみる )

クエリチューニングにおいてインデックスが使われていることに着目することが多いですが、他の重要なことに "プランの再利用" があります。プランの再利用率が悪いと SQL のコンパイルが頻繁に実行されてしまい、その結果 CPU 使用率が高くなってしまいます…

SQL Server のチューニングについてまとめてみる - その18 - ( とあるプロジェクト向けメモ )

下記の資料は、SQL Server 2008 ベースですが、SQL Server 2012 以上のエディションにも問題なく適用できる手法です。 The Data Loading Performance Guide パーティションテーブルへのデータインポートであれば、下記の部分から参考になります。 Bulk Loadi…

SQL Server のチューニングについてまとめてみる - その17 - ( FOR XML PATH の連結をもう少し高速化してみる )

最近、2日から3日家にいません。土日も結構仕事になることが多い今日この頃...今日は名古屋に行って、わらじみそかつを食べてきました。やばとんのみそかつは美味しいですね。 www.yabaton.com 今回は文字列連結を少しでも高速化 ( 新幹線でぼーっと考えてま…

SQL Server のチューニングについてまとめてみる - その16の補足 - ( TABLOCK の動作を確認してみる )

またも、移動時間に記事を書きます。前回の記事に対して補足です。 ryuchan.hatenablog.com データインポート時は下記のようにしたほうがよさそう。 Sales.OrderTracking のクラスタ化インデックスおよび非クラスタ化インデックスをすべて削除する。 DBCC TR…

SQL Server のチューニングについてまとめてみる - その15 - ( 無駄なキャッシュプランを探してみる )

今回やることを説明してみる 無駄なキャッシュプランを探します。 使用する環境を説明してみる My Lenovo with SQL Server 2014 です。 試してみる 早速試してみましょう。無駄にキャッシュされている可能性が高い sys.dm_exec_cached_plans の usecounts が…

SQL Server のチューニングについてまとめてみる - その14 - ( 少しでもオーバーヘッドを少なくしてみる )

今回やることを説明してみる 少しでも高速化するために、SET NOCOUNT ON を使用します。 使用する環境を説明してみる Microsoft Azure 上の SQL Server 2014 を使用します。 早速試してみる 以下のクエリを実行してみましょう。 select * from [Production].…

SQL Server のチューニングについてまとめてみる - その13 - ( その 12 の補足 )

下記の記事で NUMA ノード上でのカウンタについて少し触れました。 SQL Server のチューニングについてまとめてみる - その12 - ( SQL Server のメモリ関係で必要なカウンタを抽出してみる ) - 都内で働くSEの技術的なひとりごと SQL Server のチューニング…

SQL Server のチューニングについてまとめてみる - その12 - ( SQL Server のメモリ関係で必要なカウンタを抽出してみる )

今回やることを説明してみる 新年最初の記事はパフォーマンスカウンタです。(ちょっと地味ですね。)パフォーマンス計測で必要な SQL Server のパフォーマンスカウンタ ( sys.dm_os_performance_counters ) をまとめていきたいと思います。今回はメモリー関連…

SQL Server のチューニングについてまとめてみる - その11 - ( dm_exec_query_optimizer_info でチューニングの効果を確認してみる )

今回やることを説明してみる sys.dm_exec_query_optimizer_info (Transact-SQL) を使用して最適化情報を取得したいと思います。 使用する環境を説明してみる 久しぶりに Azure 環境を使います。SQL Server 2014 です。 早速ためしてみる 下記のクエリを SQL …

SQL Server のチューニングについてまとめてみる - その10 - ( 実行プランの StatementText の中に、調査用に使用するための文字列を埋め込んでみる )

今回やることを説明してみる 『SQL Server のチューニングについてまとめてみる』も今回で10回目になりました。それを記念してブログを『はてな記法 』で書いてみます。( 何で記念に『はてな記法』なのかは意味不明ですが... ) 今回は、実行プラン中に独自文…

SQL Server のチューニングについてまとめてみる - その9 - ( TempDB の動きも気にしてみる )

今回のやることを説明してみる TempDB に関して気にしない人、多いです。一時テーブル ( ローカル、グローバル )とか、インデックスのリビルド時とか ( SORT_IN_TEMPDB = ONのとき )、データの並べ替えなどお世話になることが多いです。そこで今回は、TempDB…

SQL Server のチューニングについてまとめてみる - その8 - ( 未使用なインデックスを抽出してみる )

今回のやることを説明してみる 未使用のインデックスが多く存在すると、追加・更新スピードなどに影響を及ぼします。よくあるクエリですが、未使用インデックスを抽出するクエリを作成したいと思います。 使用する環境を説明してみる Microsot Azure 上で 動…

SQL Server のチューニングについてまとめてみる - その7 - ( プランキャッシュの状態を確認する )

実行プランのキャッシュ状態、パフォーマンスをチェックするクエリです。オブジェクトの種類が Adhoc か Prepared なのかとか、その他色々気になりますよね? SELECT [SQL文] = SUBSTRING(st.text, (qs.statement_start_offset/2)+1, ((CASE qs.statement_en…

SQL Server のチューニングについてまとめてみる - その6 - ( CONVERT_IMPLICIT、暗黙の型変換の怖さを知ろう )

おお、錦織選手決勝進出しましたね!おめでとうございます♪ 優勝が見えてきました。 <a href="http://headlines.yahoo.co.jp/hl?a=20140907-00010003-tennisnet-spo" data-mce-href="http://headlines.yahoo.co.jp/hl?a=20140907-00010003-te…

SQL Server のチューニングについてまとめてみる - その5 - ( クエリプランから不足インデックス情報を取得する )

そろそろ、参加しているプロジェクトにおいて、DBMS のチューニングを始めなければいけません。ここ数日で、『SQL Server のチューニングについてまとめてみる』を充実させていきます。クエリプランから不足するインデックスを抽出したいと思います。クエリ…

便利な SQL の関数とか、構文とか、その他色々まとめてみる - その5 ( SUBSTRING から STUFF へ ) -

もうすぐ試験があるというのに、勉強せずにブログを書いています... 興味が湧かないと本当に何もしない性格です(笑) インデックスと付加列を列挙してみる - 都内で働くSEの技術的なひとりごと で記述したクエリを改善します。STUFF (Transact-SQL) 関数を使…

SQL Server のチューニングについてまとめてみる - その4 - ( クエリパフォーマンスの結果をメールで送る )

本日(7/10)は関東地方に台風が迫ってますね。関東のみなさま、早めに帰宅しましょう。台風はさておき、クエリのパフォーマンスを DMV から取得することはよくやりますよね?今回は、毎日定期レポート的にパフォーマンスの結果をメールに送信するようなことを…

SQL Server のチューニングについてまとめてみる - その3 - ( パフォーマンスがどれくらい改善される? )

最近、少しブログをサボり気味でした。また再開したいと思います。よろしくお願いします(^o^)/ SQL Server のチューニングについてまとめてみる - その1 - ( インデックスの調査 ) - 都内で働くSEの技術的なひとりごと に関する補足です。 まずは、自分のデ…

SQL Server のチューニングについてまとめてみる - その2 - ( フィルタ選択されたインデックス )

今日、ふと気づいたのですが、『 SQL Server のチューニングについてまとめてみる 』シリーズは『 その1 』で終わってましたね (笑) その1 で終わるのもどうかと思ったので、その2 をまとめてみたいと思います。( 適当すぎる.... ) 今回は、SQL Server 2008 …

そろそろ IIS のチューニングをする - その6( Performance Tuning for Web Servers )

IIS 8.5 に関するチューニングガイドがここにありますね。既にブログで紹介したものもありますが、一度読んでおくことをお勧めします。それ以外にも、Windows Server のチューニングに関しても記載がありますね。いい情報です。

そろそろ IIS のチューニングをする - その5( 『規定のドキュメント』の設定 )

規定のドキュメントを決定するのも結構大事です。頻繁にアクセスされるページなどは、規定のドキュメントの設定を使用して上位にもってくることでパフォーマンスを向上させることが可能です。既に設定されているリストの中に、該当するドキュメントが存在す…

そろそろ IIS のチューニングをする - その4( http.sysのレジストリ設定 )

http.sys のレジストリ設定です。ここもチューニングする必要あります。 以上。

そろそろ IIS のチューニングをする - その3( 新しいログの取得方法 ※IIS 8.5からです ) -

病み上がりです。今回はチューニングというわけではありませんが、チューニングに必要なログ取得について書きたいと思います。 IIS 8.0 ( Windows Server 2012 ) から、IIS 8.5 ( Windows Server 2012R2 )になって、ログの取得方法が大きく変更されています…

そろそろ IIS のチューニングをする - その2( CPU Throttling 設定 ※IIS8.0からです ) -

IIS8.0からアプリケーションプールのCPU使用率が閾値を超えた場合の動作として、『Throttle』『ThrottleUnderLoad』を設定可能になりました。ここに説明が記載されています。複数のアプリケーションプールに対して『Throttle』『ThrottleUnderLoad』設定する…

そろそろ IIS のチューニングをする - その1( keep-alive 設定 ) -

IIS のチューニングをそろそろ開始しなければいけません。しかし、IIS のチューニング自体まじめにやった経験がありません。Windows Azure に Windows Server 2012 R2 でも作って、色々調査してみます。ふと、思ったんですが、仮想マシンの作成やたら高速に…

.NET アプリケーションの高速化について探し始めてみた - その10 - ( RyuJIT(龍神) )

RyuJIT ってなんでしょう? RyuJIT とは The next-generation JIT compiler for .NET です。ここのブログを参照しました。 The world is moving to 64-bit computing even though it isn’t always faster or more efficient than 32-bit. A lot of programs …

.NET アプリケーションの高速化について探し始めてみた - その9 - ( MPGO )

MPGO とは、Managed Profile-Guided Optimaization の略です。Visual Studio 2012 と CLR 4.5 で導入されたツールです。実行中のアプリケーションの状態をプロファイリング、情報を生成し、その情報をアセンブリに埋め込みます。Ngen はこのプロファイリング…

SQL Server Profiler による実行プランの取得について

実行プランを取得する方法として、SQL Server Management Studio で取得する方法、DMVで取得する方法以外に、SQL Server Profiler で取得する方法があります。 まず、SQL Server Profiler を起動します。 イベントの選択タブをクリックし、すべてのイベント…

Nested に続いて Hash および Merge について説明してみる

『 SQL Server の実行プランを少しだけ詳しく説明したみた 』で Nested Loop に関して説明しました。今回は、 Hash , Merge について説明します。 ※関係ないですけど、新幹線の移動中はブログを書くのにもってこいの環境です。 それでは本題に戻ります。まず…

SQL Server の実行プランを少しだけ詳しく説明したみた

SQL Server Management Studio の知っておいたほうが良い機能について挙げてみる - その3 - で使用していた SQL を検証がしやすいよう下記のように変更したいと思います。( NESTED LOOPS をわざと発生するようにしています。) USE AdventureWorks2012SET STA…

.NET アプリケーションの高速化について探し始めてみた - その8 - ( .NETFramework の GC )

今回は、.NETFramework の GC の種類に関する記事です。ここの記事が参考になります。これは全く知見がありませんでした。下記のような種類があるそうです。 ワークステーション/コンカレント実行なし ―― メモリ割り当てに責任を持つマネージスレッドにおい…

SQL Server のチューニングについてまとめてみる - その1 - ( インデックスの調査 )

SQL Server のチューニングについてまとめていこうかと思います。まずは、インデックスを使用していないクエリの抽出方法です。SQL Server のチューニングには、dm_* で始まる動的管理ビューを多用します。今回は、主に以下の3テーブルを使用して、インデッ…

.NET アプリケーションの高速化について探し始めてみた - その7 - ( ExactSpelling 属性 )

ExactSpelling 属性は名前の文字列が完全に一致する時のみ利用可能とするかの属性です。ExactSpelling = true とすることで、完全に一致した関数のみとなります。ExactSpelling = false とすると、部分一致した関数を検索します。以下はサンプルです。 publi…

.NET アプリケーションの高速化について探し始めてみた - その6 - ( ConcurrentDictionary )

ConcurrentDictionary は、スレッド数と初期容量を設定することで若干高速化されます。スレッドセーフなクラスなので、Parallel クラスで処理することも可能です。ソースコードは以下の通りです。 //ConcurrentDictionaryへの要素追加に関する計測 var lisw …

.NET アプリケーションの高速化について探し始めてみた - その5 - ( ConcurrentDictionary のパフォーマンス計測 )

.NET アプリケーションの高速化について探し始めてみた - その4 - で取り上げた ConcurrentDictionary のパフォーマンスを計測してみたいと思います。検証しようかと思ったら、仮想環境を格納してある外付けハードディスクを忘れてしまいました...こんな時は…

.NET アプリケーションの高速化について探し始めてみた - その4 - ( ConcurrentDictionary )

Dictionary をスレッドセーフにするには、自前で Monitor などを使用してそれぞれのメソッドをロックする必要がありました。.NET 4.0 より ConcurrentDictionary というクラスが追加されています。(今更?) 複数のスレッドから同時にアクセスできるキーと値…

.NET アプリケーションの高速化について探し始めてみた - その3 - ( SuppressUnmanagedCodeSecurityAttribute属性 )

SuppressUnmanagedCodeSecurityAttribute() って知ってますか?ネットをぼーと探していたら見つけたのですが、ここにこの属性の説明が記載されています。 ※下記はMSDNから抜粋 // SuppressSecurity.cs using System; using System.Security; using System.Se…

.NET アプリケーションの高速化について探し始めてみた - その2 - ( DLL のベースアドレス )

昔々、dll の Load 時に配置アドレスの競合が発生してしまうと、再度配置場所を探す必要があり、少なからずレスポンスに影響が出ていました。それを未然に防止するため、予めベースアドレスを指定します。Visual Studio 2012 では下記のように設定します。 …

.NET アプリケーションの高速化について探し始めてみた - その1 - ( アセンブリの圧縮 )

今月・来月は、.NET アプリケーションの高速化について色々調査したいと思います。コードの最適化、NGEN等といった一般的な高速化手法があります。今回はネットで調べ物していた時に見つけたものを少し紹介したいと思います。RPX ( Rugland Packer for ( .Ne…