ClickOnce URLDownloadToCacheFile failed with HRESULT '-2146697211' の解決方法
原因
「.application」ファイルが見つからない為エラーになっていました。
発行の際にフォルダの場所やURLの指定が間違っていると考えられます。
解決方法
確認する場所は2つあります。
1. 発行フォルダー、インストールフォルダーのURLの見直し
発行するプロジェクトのプロパティを開きます。
「発行フォルダーの場所」「インストールフォルダーのURL」を見直します。
私の場合はWebサーバを介してインストールを行う為URLを指定しています。
2. 発行フォルダーとapplicationファイルの見直し
「発行フォルダーの場所」に「.application」ファイルがある事を確認します。
AWS Backup EC2 復元時にパブリックIPを付加する方法
SQL Server クラスター化インデックスの動作と実行プランについて
はじめに
SQL Server の検索速度を上げる方法にインデックスの利用があります。
今回は「クラスター化インデックス」についてまとめます。
学習に使用した資料は公式HPのSQL Server 2012 自習書シリーズになります。
SQL Server 2012 | マイクロソフト クラウド プラットフォーム
データベースは自習書シリーズに付属しているサンプルを使用しています。
詳細は以下の記事を参考にして下さい。
knkomko.hatenablog.com
動作環境
・Windows 10 (バージョン 1909)
・SQL Server 2017 Express
Download Microsoft® SQL Server® 2017 Express from Official Microsoft Download Center
・Microsoft SQL Server Management Studio 18
SQL Server Management Studio (SSMS) のダウンロード - SQL Server Management Studio (SSMS) | Microsoft Docs
クラスター化インデックスとは
ヒープ領域を使用せずに実データを物理的に並び替えたインデックスです。
インデックスを使用したSQLは最も検索が速い Clustered Index Seek または Clustered Index Scan の動作です。
引用 : インデックスの基礎とメンテナンス
非クラスター化インデックスとの違い
非クラスター化インデックスの検索は Indes Seek 後 RID Lookup が動作します。
クラスター化インデックスではヒープ領域を使用せずに実データを使用する事で RID Lookup が無くなる為、非クラスター化インデックスよりも検索が速いです。
クラスター化インデックスの注意点
1. 実データをインデックス内に格納するのでテーブル内で1つしか作成できない。
2. インデックス作成時に、実データの並び替えを行うため
非クラスター化インデックスを作成するよりも作成時間がかかる。
3. インデックス作成時に、実データ(ヒープ)を並び替えた結果を格納するための
作業領域としてテーブルサイズの約 1.5 倍の空き容量が必要になる。
4. インデックス作成時に、トランザクションログへの変更履歴も記録されるため
その分の空き容量も必要になる。
実行プランの動作
実行プランの動作については以下のスライドが参考になりました。
④Clusted Index Scan、⑤Clusted Index Seek はクラスター化インデックスを使用した場合にだけ動作します。
引用 : https://www.slideshare.net/ssuser89be8d/index-tuning-129457451/12
インデックスを使用しない場合の実行プラン
最も遅い「Table Scan」を行っています。
クラスター化インデックスを使用した場合の実行プラン
インデックスを姓列に作成します。
オブジェクトエクスプローラーから作成したインデックスが確認できます。
同じSQLを実行すると最も高速な検索「Culusted Index Seek」を行っています。
非クラスター化インデックスを使用した場合の実行プラン
検索に「Index Seek」「RID Lookup」を使用している事が分かります。
検索結果に該当するデータが大量にある場合の実行プラン
非クラスター化インデックスではインデックスが使用されませんでした。
LIKE文では295件のデータが該当し最も遅い「Table Scan」が行われました。
インデックスを使用していてもインデックスを利用しない検索が行われています。
knkomko.hatenablog.com
クラスター化インデックスを使った場合は最も速い検索「Clusted Index Seek」が使用されます。
SQL Server 非クラスター化インデックスの動作と実行プランについて
はじめに
SQL Server の検索速度を上げる方法にインデックスの利用があります。
今回は「非クラスター化インデックス」についてまとめます。
学習に使用した資料は公式HPのSQL Server 2012 自習書シリーズになります。
SQL Server 2012 | マイクロソフト クラウド プラットフォーム
データベースは自習書シリーズに付属しているサンプルを使用しています。
詳細は以下の記事を参考にして下さい。
knkomko.hatenablog.com
動作環境
・Windows 10 (バージョン 1909)
・SQL Server 2017 Express
Download Microsoft® SQL Server® 2017 Express from Official Microsoft Download Center
・Microsoft SQL Server Management Studio 18
SQL Server Management Studio (SSMS) のダウンロード - SQL Server Management Studio (SSMS) | Microsoft Docs
非クラスター化インデックスとは
ヒープ領域に保存されている実データへのポインタを持つインデックスです。
そのためインデックスを使用したSQLは以下のように動作します。
①インデックスを検索する Index Seek の動作
②検索したインデックスのポインタを辿って実データを読む RID Lookup の動作
引用 : インデックスの基礎とメンテナンス
実行プランの動作
実行プランの動作については以下のスライドが参考になりました。
④Clusted Index Scan、⑤Clusted Index Seek はクラスター化インデックスを使用した場合に行う為、非クラスター化インデックスでは使用されません。
引用 : https://www.slideshare.net/ssuser89be8d/index-tuning-129457451/12
インデックスを使用しない場合の実行プラン
最も遅い「Table Scan」を行っています。
インデックスを使用した場合の実行プラン
インデックスを姓列に作成します。
オブジェクトエクスプローラーから作成したインデックスが確認できます。
先ほどと同じSQLを実行すると高速な検索「Index Seek」を行っています。
インデックスを作成しても効果の無い列
1. WHERE句の検索条件にほとんど使用されない列
インデックスを作成した列のデータを更新した際にインデックスのツリー構造も更新されるためパフォーマンスが低下する場合があります。
2. 検索条件に該当するデータが大量にある場合
該当するデータが大量にあると RID Lookupによるデータの取得が、最も遅い「Table Scan」より効率が悪くなる場合があります。
検索結果に該当するデータが大量にある場合の実行プラン
LIKE文では295件のデータが該当し最も遅い「Table Scan」が行われました。
インデックスを使用していてもインデックスを利用しない検索が行われています。
"Aoki"で検索していた時は高速な検索「Index Seek」が行われていました。
SQL Server 自習書 インデックス基礎とメンテナンス sampleDB の作成方法
はじめに
SQL Server 2012 インデックスの基礎とメンテナンスに付属する
サンプルデータベース sampleDB の作成方法です。
ダウンロードURLが分からず、探すのに時間がかかったのでまとめます。
2. EXEファイルの実行
ダウンロードしたサンプルスクリプトをダブルクリックして実行すると
「SQL11_SelfLearning15_index」のフォルダが作られます。
3. sampleDBを作成するクエリの実行
フォルダ内の「sampleDB.sql」をManagement Studioから実行します。
4. sampleDBの確認
オブジェクトエクスプローラーを更新すると「sampleDB」が確認できます。
SQL Server 実行プランの表示方法
はじめに
SQLのパフォーマンスを向上させる必要が出てきました。
そこで必要となる実行プランを表示する方法をまとめます。
実行プランは「図」と「テーブル」の形式で表示できます。
またadmin以外のアカウントが使用するためには権限が必要です。
環境
・Windows 10 (バージョン 1909)
・SQL Server 2017 Express
Download Microsoft® SQL Server® 2017 Express from Official Microsoft Download Center
・Microsoft SQL Server Management Studio 18
SQL Server Management Studio (SSMS) のダウンロード - SQL Server Management Studio (SSMS) | Microsoft Docs
実行プランを表示するツール
SQL Server Management Studioを使用します。
図の形式で表示
ツールバーの赤枠で囲った部分を左クリックします。
これで次からSQLを実行した時の実行計画を保存します。
SQLを実行すると「実行プラン」タブに図の形式で表示されます。
図にマウスカーソルを重ねると実行プランの詳細が確認できます。
テーブルの形式で表示
表示を有効にするには以下のコマンドを実行します。
SET STATISTICS PROFILE ON
以降SQL実行すると「結果」タブにテーブルの形式で表示されます。
最後に表示を無効にします。
SET STATISTICS PROFILE ON
アカウントに必要な権限
接続アカウントがadminでない場合は接続の権限が必要です。
今回は「Makoto」のアカウントに接続の権限を与えます。
管理ツールを使用します。
セキュリティ→ログイン→アカウント名を右クリックで「プロパティ」を開く。
「ユーザーマッピング」を左クリックします。
実行プランを確認するデータベースの「マップ」をチェックします。
「既定のスキーマ」の[...]を左クリックします。
[追加]を左クリックします。
接続権限となる「dbo」を入力して[OK]を左クリックします。
[OK]を左クリックします。
データベースに必要な権限
接続アカウントがadminでない場合は「選択」「実行プラン」の権限が必要です。
今回は「Makoto」のアカウントに「選択」「実行プラン」の権限を与えます。
データベース→使用するデータベース名を右クリックで「プロパティ」を開く。
「権限」を左クリックし、権限を与えるアカウントを選択します。
「選択」の「許可」にチェックします。
「プラン表示」の「許可」にチェックします。
[OK]ボタンを左クリックします。
ClickOnceを使ったアプリケーションのインストール方法
はじめに
アプリケーションのインストールとバージョンアップを簡単に行える ClickOnce を使ってみました。
今回は Web を介してインストールする方法についてまとめます。
開発環境
Windows 10 Home
VisualStudio 2015 Community
IIS10
1. サンプルアプリの作成
折角なのでLabelにバージョン情報を表示するアプリを作ります。
今回はWindowsフォームアプリケーションを使用します。
プロジェクト名は「ClickOnceSample」としました。
デザインは Label をひとつ追加します。
以下のようにバージョン情報を取得して表示するようにします。
using System; using System.Windows.Forms; namespace ClickOnceSample { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { //自分自身のAssemblyを取得 System.Reflection.Assembly asm = System.Reflection.Assembly.GetExecutingAssembly(); //バージョンの表示 label1.Text = asm.GetName().Version.ToString(); } } }
2. フォルダの作成
アプリケーションの発行先となるフォルダを作成します。
今回は C:\deploy\clickoncesample\ としました。
3. IISのインストールと設定
ClickOnceの機能をWebを介して使用するためWebサーバを使用します。
IISを既に使用している場合はこの手順を飛ばしても問題ありません。
コントロールパネルの「プログラムと機能」を左クリックします。
「Windowsの機能の有効化または無効化」を左クリックします。
「インターネットインフォメーションサービス」にチェックを入れます。
その他の機能も以下のようにチェックを入れて[OK]ボタンを左クリックします。
再起動を行います。
再起動後、コントロールパネルの管理ツールを開きます。
「インターネットインフォメーション(IIS)マネージャー」を開きます。
「サイト」を右クリックして[Webサイトの追加...]を左クリックします。
「サイト名」「物理パス」「ポート」を指定して[OK]を左クリックします。
「ClickOnceSample」が作成されます。
4. アプリケーションの発行
VisualStudioに戻ってプロジェクト名を右クリックします。
表示されたメニューの中から「発行(b)...」を左クリック。
発行先を設定するため先ほど作成したフォルダを指定します。
インストール方法は今回「Webサイトから(W)」を選択します。
URLを指定するので[参照(B)...]を左クリックします。
「IIS Express」の「WebSite1」を選択して[開く]を左クリックします。
※ちなみに以下のような表示の場合はIISが有効になっていません。
この状態だとWebサーバを介してClickOnceの機能を使うことが出来ないため
IISのインストールと設定が正しく行えているのか確認する必要があります。
URLを指定したら[次へ(N) >]を左クリックします。
今回はオフラインでも使用できるように上のラジオボタンを選択します。
[次へ(N) >]を左クリックします。
設定内容が表示されるため内容を確認して[完了(F)]を左クリックします。
発行が完了すると自動的にブラウザが起動します。
発行が成功した場合の出力欄は以下のようになります。
※IISで設定が行われていないと以下のような警告が表示されます。
警告: 発行されたアプリケーションは http://[コンピュータ名]:[ポート番号]/publish.htm で表示できません。
5. アプリケーションのインストール
[インストール]ボタンを左クリックすると操作について聞かれます。
今回は[実行]を左クリックします。
.Net Framework のライセンスに[同意する]を左クリックします。
セットアップが開始します。
アプリケーションの検証が行われます。
最後に[インストール]を左クリックするとインストールできます。
インストールに成功するとアプリケーションが起動します。
6. アプリケーションのアンインストール
コントロールパネルからアンインストールする事が出来ます。
まとめ
ClickOnceを使うことで簡単にアプリケーションを配布できました。
今後はバージョンアップの方法や証明書についてもまとめていきます。