Code for final

ふぁいなる向けのコード置き場です。すでにコードじゃないこともいっぱい。

SQL Serverのユーザファンクション(ユーザー定義テーブル値関数)を使用していて性能が出ない(遅い)場合にすること。

SQL Server上の開発したシステムでSQLの共通化(複雑な部分の隠蔽)にユーザファンクション(ユーザー定義テーブル値関数)を使用しました。

ユーザー定義テーブル値関数 | Microsoft Docs

ユーザファンションは大抵は計算式とかで使うと思いますが、SQL Serverではテーブルを返すこともできるのです。
ビューではパラメタを渡せませんが、ファンクションなのでパラメタを渡すことができて便利です。

通化はうまく作用してSQLのスキルが低い開発者でも開発ができて非常に有用でした。

ところが、結合テストでデータ件数が10,000件を超えると途端に実行速度が遅くなりました。
件数が少ないときは数秒だったのに、実行しても全然返ってきません。

いろいろ調べるとユーザファンクションとテーブルのJOINでは特に問題が確認できませんでしたが、 ユーザファンクション同士をJOINしているところが問題で、 どうやらインデックスが効いていないっぽいことがわかりました。

対策として試しにユーザファンクションのところを、ユーザファンクション内で定義しているSQLに置き換えることで性能が改善しました。

ただ、ユーザファンクションで定義しているSQLを展開しただけなので、実行されるSQLとしては同じものになると思っていたのですが、若干違うみたいです。

まとめるとユーザファンクション(ユーザー定義テーブル値関数)を使用して性能が出ない場合は、ユーザファンクション同士をJOINなどしていないか確認し、していたらユーザファンクションで定義しているSQLをそのまま置き換えると性能が改善すると思います。

Windows10でデータを残しながらシステム修復(OS上書きインストール)する方法

ついこないだWindows10で自動修復がループする自体におちいりました。

原因はあまり心当たりがないのですが、突然起きたのでかなりテンパりました。
藁にもすがる思いでいろいろググっていろいろ試しました。
原因によって対応方法は異なると思いますが、今後のために失敗した手順と一番よいと思った手順を以下に記しておきます。

ちなみに今回のエラーは「CRITICAL_SERVICE_FAILED」でした。

失敗したシステム修復手順

まずは失敗した手順です。 各々の詳細な手順はググればいくらでも出てくるので割愛します。

セーフモードで起動

セーフモードで起動したら直前にインストールしたアプリ、ドライバとか消せば復活することはしばしばありますが、今回は起動しませんでした。
それに直前にアプリやドライバをインストールしていなかったので起動したとしても何すればよかったのか。

回復オプションでシステム復元を選択

そもそもシステム復元ポイントの設定をしていませんでした。。

回復オプションのスタートアップ修復を選択

Windows10にはスタートアップ修復という便利でドンピシャな機能があります。ただこれでは修復されませんでした。
複数回実行すると効果があると記載があったので実行したけど修復されませんでした。

回復オプションでコマンドプロンプトを開いて「sfc /scannow」を実行

よくこれで修復されると記載されていましたが、これでは修復されませんでした。

回復オプションでコマンドプロンプトを開いて「bootrec /fixboot」を実行

あとあとこれを行ったのが一番まずかったです。これを実行したことでリカバリパーティションWindowsから認識されなくなりました。(データは残っている)
よく意味を理解せずやってしまうと危険なので注意ください。

回復オプションでコマンドプロンプトを開いて「notepad」を実行

Cドライブのファイルをバックアップとるため、外付けHDDに接続した状態で起動し、notepadを開いてファイルの選択ダイアログで右クリックメニューを使って別のドライブにフォルダやファイルのコピーができます。
xcopyより手軽でこれは便利です。

リカバリパーティションから復元

もうリカバリするかと諦めて回復オプションで「PC を初期状態に戻す」を選択しようと思ったら出てこなくなりました。
おそらくですが直前の「bootrec /fixboot」を実行したのがいけなかったのかと思います。

起動オプションで「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」を選択

もうどうすればといろいろ悩んだときにだめもとで起動オプションを選択してみたら思いのほかあっさり起動できて拍子抜けしました。

final.hateblo.jp

とりあえず起動できるようになりましたが、毎回「ドライバー署名の強制を無効にする」を選択にしないと起動できないのは不便すぎます。
そこで設定の回復メニューからPCを初期状態に戻すを選択しましたが、やはりリカバリパーティションが認識されずに途中でエラー。

で、ここまでが失敗した手順です。

成功したシステム修復手順

以下から僕が一番いいと思った手順です。 なんか不調だけどWindowsが起動できるときは一番リスクが少ない修復手順と思います。

Windows 10 Media Creation Toolをダウンロード

以下のURLにアクセスして、「ツールを今すぐダウンロード」を実行して、MediaCreationTool.exeをゲットします。

Windows 10 のダウンロード

Windows 10 Media Creation ToolでOSを上書きインストール

ダウンロードしたMediaCreationTool.exeを実行します。
「このPCを今すぐアップグレードする」を選択します。
そうです、Media Creation Toolなのにメディアを作らなくてもいいんです。

重要なのは途中で個人用ファイルとアプリを引き継ぐを必ず選択してください。

ウィザード形式なのでポチポチしていけばできます。

心配な方は以下に手順がまとめられているので参考にしてください。

Windows 10 を上書きインストールする方法 - ぼくんちのTV 別館

アプリやデータを一つも失うことなく、これで無事にシステム修復ができました。

ということでWindows10がおかしくなったときは、いろいろと修復しようとせず、
Windowsの起動ができる場合はMedia Creation Toolを使用して
Windowsの上書きインストールをおすすめします。
アプリとデータの引き継ぎが可能なので失うものはありません。

言うまでもないですが、ハードの問題のときはこの手順はまったく使えないのでご注意を。

Windows10が通常起動しなくなった場合でも「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」で起動できることがある。

ついこないだWindows10が突然起動しなくなりました。

原因不明でいろいろとググりにググりまくっていろいろと調べてありとあらゆる修復方法を試みましたが、
修復できなかったときにふと以下の起動オプションを実行することで起動できることがありました。

これはググったときに載ってなかったので、記しておきます。

ちなみに僕が発生したときのエラーは「CRITICAL_SERVICE_FAILED」でした。

セーフモードで起動しようとしたときに並列に以下のオプションがあると思います。どちらかを選択して起動するか確かめてください。
Windows10が起動しなくなったときにいろんなリカバリをしていてその後の状態によってどっちで起動するかは異なりました。

「ドライバー署名の強制を無効にする」

「起動時マルウェア対策を無効にする」

詳細な手順は以下のページを確認してください。

Windows10/8.1をセーフモードで起動する方法とセーフモードでPCを復旧する方法 - ぼくんちのTV 別館

原因によっては起動できないこともあると思いますが、「ドライバー署名の強制を無効にする」か「起動時マルウェア対策を無効にする」のどちらかを選択することでいとも簡単に起動することができました。

再起動するとまた自動修復になって起動しなくなるので起動オプションで同じものを選択すればまた起動します。

この起動プションを選択することでみなさんのWindowsが起動できることを祈っています。