Windows 10 起動が遅い

Windows 10 起動が遅い時の対処方法

最近、昔使っていたノートPCのメモリを増やして活用しています。
が、やはりとっても重くて。。。
一番の原因はWindows Update なのですが、これは仕方ないので重くても放置して、我慢しています。

起動時に重くなる原因はその他にもいくつかあるので、ここで原因とその対処法を紹介していきます。
Windows SuperFetch
・Microsoft compatibility telemetry

今のところ、2つが目立っているので、この2つから。

起動が遅い時・重い時の確認方法

ちなみに、起動が遅い時や立ち上げ直後はアプリが重いとか、そんな時は「タスクマネージャー」で重くなっている原因を確認しましょう。
タスクマネージャーの立ち上げ方はいくつかありますが、スタートボタンを右クリックすると下のようなメニューが表示されますので、その中からタスクマネージャーをクリックします。

タスクマネージャーを立ち上げると、下の画面にいなります。
[プロセス]タブでは、どのプロセスがCPU,メモリ,ディスク,ネットワークをどの程度使用しているのかがわかります。
中にはサービスホスト:ローカルシステム(x)のようにまとめて表示されるものあります(32bit版)が、[>]をクリックすると展開されて何が起動されているかだけわかります。


立ち上げ時やいつもと違って重いと感じたときは、タスクマネージャーでどんなプロセスが重たくしているかを確認しましょう。

タスクマネージャーの見方

 CPUやメモリ,ディスクが100%になっていると、PCの動作が緩慢になります。
上の図では、Google Chrome がメモリを475.3MB使っています。他のプロセスやアプリも合わせて全体の45%のメモリを使用しています。
これがメモリ100%に近いと、メモリのスワップという動作が起こり、ディスクにも影響を及ぼしかなりPCの動作を重くします。
そんな場合は、メモリをたくさん使っているアプリを終了させメモリを100%使用状態から救い出すことで動作が軽くなります。
また、メモリのスロットに空きがあるとか、メモリ容量の小さなメモリを使っている場合には、メモリ容量を追加することでメモリ100%使用状態から抜け出すことも出来ます。

しかし、以下のような場合も有り突然にPCが重たくなることも。。。


その後、何も触ってないのにGoogle Chrome がメモリを2,711.2MBまで使い始めました。


その後、3,152.6MBへ。何がGoogle Chromeを駆り立てているのでしょう??
3GBは勘弁して欲しい。。。



しばらくすると落ち着きました。
なにもしていないのに、プロセス(タスクかな?)が13から12に減っていました。
Google Chrome なにか勝手にやってくれます。
このように、突発的な事象もタスクマネージャーでは見られて、対応できることなら対応する目安になります。
上のGoogle Chrome の場合は、Chrome を停止すれば解消されるのでしょうが、そのうちまたやりだすので Chromeを使うのをやめるしか手がないかも知れません。私は便利なのでChrome を使い続けますけど。

CPUが100%に近い場合は、処理が終わるのを待つしかありません。
無駄なアプリを動かしているのなら終了させることも出来ますが、そうでない時は待つしかありません。
CPUは稼働しているプロセスやアプリのみ使用しているのでメモリのように稼働していないアプリを終了させても効果は望めません。
CPUが常に100%に近い場合は、CPUの上位機種に変えることがもっとも有効です。

ディスクが100%に近い場合も処理が終わるのを待つしかありません。
CPUと同じく無駄なアプリを動かしているのなら終了させることも出来ますが、そうでない時は待つしかありません。
ディスクが100%に近い場合は大量のデータアクセス時、Windows Updateや動画再生・編集なので、常に100%であることは無いと思います。
それでも何とかしたい場合は、SSD(ソリッドステートドライブ)に変えるとか手も有りますので検討をしてください。

ざっくりとですが、以上のようにどのようにしたら良いかの目安になりますのでタスクマネージャーを活用しましょう。

ここでの対処対象

ここで紹介する対処対象は、有っても無くてもさほど関係ないけど重たくする原因となるプロセスです。
起動時はいろいろなアプリが一斉に活動するため遅くなっても仕方のないこと何のですが、起動後の落ち着いた時間帯に少し速くなるために起動直後の大変な時に負荷をかけるプロセスはメリットが小さいので機能を停止させておきましょうという趣旨です。
例えば「Windows SuperFetch」は、アプリケーションの起動速度の向上、全体的なレスポンスの向上、空きメモリの有効活用が見込めますが、逆に立ち上げ時はその下準備のためにやたらディスクやCPUを使い起動を遅くするなど弊害があります。
私は古いPCに Windows SuperFetchのメリットを感じないので機能を停止させます。

各々のPCの能力とおメリットデメリットに合わせて、停止の対象にするか検討してください。

今後、古いPCを使っていて重いかなと思った時に確認してご紹介していきます。
以上、「Windows 10 起動が遅い時」の対処方法のご紹介まで。

Windows 10 KB4088776 インストール エラー

Windows 10 KB4088776 インストール エラー

いつも使っていないPCを立ち上げたら、やたら重くて何も作業ができない程度になりました。
どうやら理由は、Windows Update をサボっていたので、何やら頑張っているようでした。

Windows Modules Installer Worker や サービスホスト:ローカルシステムがディスクをやたら使用していたので、Windows Update 頑張って!と、しばらく放置しておきました。

 

しばらくしてWindows Update を見ると、インストール エラーになっています。

仕方ないので、再度「再試行」ボタンをクリックしてインストールを行いました。

しかし、またもやインストール エラーに、、、

再起動してインストール

そこで、今度は一度再起動してからと、、、

「今すぐインストール」ボタンをクリックして少し祈るような気持ちで。。。待ちました。
が、結果はインストール エラーでした。

 

こんな時はいつものGoogle先生に頼るしかありません。
さすがはGoogle先生!それらしいアドバイスが見つかりました。

まずは、KB4090914を入れろと。。。ふむふむ。では早速。

サクッとダウンロードし、サクッとインストールしました。
何のトラブルもなくインストールできました。

KB4090914 をインストール後にインストール

さて、もう一度KB4088776 のインストールです。

68%と順調です!
しかし、100%まで来たものの結果は、以下の通りでした。。。( ノД`)シクシク…

KB4090914 は関係なかったのか?たぶんそうなのでしょう。どうなんだろう?

しかし、このままでは気持ちも悪いので、手動で入らないか試してみることに。

手動でインストール

今回もサクッとダウンロードし、サクッとインストールしました。

インストールは完了しました。
後は再起動後に正常に反映されていればOKなのですが。。。

リブート前のOSのビルド番号

OSのビルドは、16299.192です。
Google検索によると 16299.309 が正常にインストールされた時のビルド番号になっています。

立ち上げに途中に一度リブートが入るなど、ドキドキの立ち上げでしたが、結果は以下の通りです。

良かった~^^
とりあえず、めでたしめでたし^^

同じKB4088776 インストール エラーでも、同じようにインストールが出来るかわかりませんが、一応参考にしてもらえると幸いです。
今はWindows Update も収まって非常に快適に作業ができています^^

 

以上、「Windows 10 KB4088776 インストール エラー」でした。

Windows 10 ハードウェア予約済み

Windows 10 ハードウェア予約済み

メモリの増設をしたのに、なぜかハードウェア予約済みにメモリを取られて増えてないってことはありませんか?

この現象は、基本的に32bit版でも64bit版でも起こります。
しかし、64bit版は予約済を解消できる可能性が高いですが、32bit版は解消できないこともあります。

64bit版 ハードウェア予約済み

主な原因は3つあります。

  1. メモリが認識されていない(メモリがきちんと挿さっていない)
  2. メモリの最大量を設定している
  3. グラフィックボードなどにメモリを割いている

他にも個別の不具合などで同じような現象が発生することもあります。
しかし、多くは「メモリが認識されていない」か「メモリの最大量を設定している」です。

メモリが認識されていない

そもそも挿しているメモリの容量を Windows が認識していない時など。

タスクマネージャーのパフォーマンスでメモリ量の確認

タスクマネージャーのパフォーマンスでメモリ量の確認

例えば、8.0GBメモリを挿しているのに、上のように4.0GBしかない場合は、メモリがきちんと挿さっていない可能性が大です。
また考えにくいのですが、ネットで検索してみるとBiosでは認識されているのにWindowsでは認識されないという、摩訶不思議な現象も起きているようです。
その場合は、単に挿しなおせば正常に戻るそうです。

まずは、Windowsに挿したメモリ分だけ認識されているかを確認しましょう。
何をしても認識されない場合、メモリが壊れているかマザーボードが壊れている可能性があります。

メモリの最大量を設定している

このケースは、メモリに挿した容量をWindowsがきちんと認識しているときに確認します。

タスクマネージャーのパフォーマンスでハードウェア予約済の確認

タスクマネージャーのパフォーマンスでハードウェア予約済の確認

上の例は、4.0GBのメモリを挿し、3.0GBしか使用可能になっておらず、1.0GBがハードウェア予約済になっています。
この時、メモリの最大量を3.0GBに設定している可能性が有るので確認します。

システム構成の[ブート]タブの「詳細オプション」を開き、最大メモリの設定を確認・解除します。

1)ますは、「システム構成」アプリを立ち上げます。
下のように、msconfig と入力して、表示されたシステム構成アプリをクリックします。

システム構成アプリを起動する

システム構成アプリを起動する

2)次に[ブート]タブをクリックします。

更に「詳細オプション」ボタンをクリックします。

詳細オプションを表示する

詳細オプションを表示する

3)ブート詳細オプション画面が開きます。

最大メモリのチェックを外します。

元々外れていた場合は原因がメモリの最大量を設定しているということではないのですが、これも不思議なことにチェックしてチェックを外したら上手く行ったとのネットでの報告があります。
世に中には絶対と言うことは無いので、外れていたらチェックを入れて最大メモリを指定して試してみてください。

最大メモリのチェックを外す

最大メモリのチェックを外す

  1. 再起動してメモリがほとんどすべて使用可能な状態になっているか確認します。

グラフィックボードなどにメモリを割いている

このケースは使っているマザーボードやBios設定アプリ、周辺機器デバイスによって変わってきます。
なので、個別にメモリを何かに割り当てていないかを確認してください。

32bit版 ハードウェア予約済み

Windows の32bit版はそもそも、3.0GB程度までしか使用できません。
32bit版は、4.0GBのアドレス空間にアクセスできる仕様になっていますが、その4.0GBのアクセス空間のうち、末尾の0.5~1GB程度がグラフィックスカードやその他のデバイスなどによって占有されているためです。
なので、見た目上500MB~1.0GBがハードウェア予約済みになってしまいます。
マザーボードや周辺機器デバイスによって使用できるメモリ量が変わりますので、大まかに3.0GB程度まで使用可能であれば、それで正常です。

もし、2.0GBまでしか使用可能になっていないということであれば、64bit版と同じチェックが有効です。
最大メモリや他のデバイスにメモリを割いていないか確認しましょう。

以上、「Windows 10 ハードウェア予約済み」でした。

Windows 10 Microsoft アカウントとローカルアカウントの違い

Windows 10 Microsoft アカウントとローカルアカウントの違い

Windows 10 は2種類のユーザーアカウントを使うことができます。
1つは、Microsoft アカウント
もう1つは、ローカルアカウント

ちなみに、Microsoft アカウントでサインインすれば、Microsoft が提供するさまざまなオンラインサービスが利用できるため、Windows 10では、Microsoftアカウントの使用が推奨されています。

この2つのユーザーアカウントの違いは何なのでしょうか?

2種類のユーザーアカウント

ローカルアカウントとMicrosoftアカウントについて少し説明します。

ローカルアカウント

使用するパソコンにアカウントを登録し、パソコンでサインイン(ログイン)認証を受けます。
パソコンにアカウントを登録するため、パソコン固有のアカウントになります。
複数のパソコンに同じアカウント名でアカウントを作成しても、もちろんパソコンの設定は同期されません。
また、ローカルアカウントでは、Microsoft Store からアプリをダウンロードすること、Microsoft が提供するオンラインサービスを使用したりすることができません。

Microsoftアカウント

Microsoft にアカウントを登録し、インターネット経由でサインイン認証を受けます。
Microsoftアカウントは、パソコンに電子メールアドレスとパスワードを使用して、Microsoft が提供するオンラインサービス( Outlook.com や OneDrive など)や Windows 10 へサインインするためのアカウントです。
Microsoftアカウントでサインインすると、Microsoft Store から任意のアプリをダウンロードすることができます。
また、複数のパソコンに同じMicrosoftアカウントでサインインすると、個人設定をオンラインで同期して、パソコンのテーマや壁紙、ブラウザーのお気に入り、アプリなどを共有できます。
会社などで急なPC変更があっても個人設定をオンラインで同期してくれるので、この機能は助かりますね。

どちらを選ぶ?

便利なのは Microsoft アカウントですね。私も基本 Microsoft アカウントを使っています。
Microsoft が提供するオンラインサービスにシームレスに繋がるので何かと便利です。
ただ、 Microsoft に管理されている感が残りますので、なんとなく不安と言う人も居ると思います。

Microsoft が提供するオンラインサービスを何も使っていなくて、PCも1台しか使っていない場合だと、ローカルアカウントで十分ですね。
ローカルアカウントなら個人情報も Microsoft に提供しなくて済みますしね。

ちなみに、 Microsoft アカウントもネットに接続していない OFF LINE 状態でも最後に使ったパスワードを使ってログインできるので、必ずネット接続していないとダメと言うわけではありません。

Microsoft アカウントとローカルアカウント、どちらを使っても大差ないので、Microsoft に管理されている感をあまり感じない人は Microsoft アカウントが便利だと思います。
気になる人は、個別管理のローカルアカウントで。

以上、「Windows 10 Microsoft アカウントとローカルアカウントの違い」でした。

Sql Server 偏差値の求め方

Sql Server 偏差値の求め方

Sql Server を使って偏差値を求める SQL の書き方です。
偏差値とは、ある数値がサンプルの中でどれくらいの位置にいるかを表した無次元数。
平均値が50、標準偏差が10となるように標本変数を規格化したものです。
偏差値の利用価値が高いのは、サンプルの数値の分布が正規分布に近い状態の時で、試験などの結果に良く利用されていますね。

偏差値の求め方

偏差値の求め方ですが、
1)平均点を求める
2)平均点との差を求める
3)平均点との差の平方数を求める
4)分散を求める
5)標準偏差を求める
6)平均点との差に10をかけ標準偏差で割り+50する
以上で偏差値が求まります。

SQL で偏差値を求める

偏差値を求める SQL の例を示します。

declare @tbl1 table(c_point int)
insert into @tbl1 (c_point) values (30)
insert into @tbl1 (c_point) values (40)
insert into @tbl1 (c_point) values (20)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (70)
insert into @tbl1 (c_point) values (80)

--平均値を算出する
declare @avg float
select @avg=AVG(cast(c_point as float)) from @tbl1

--標準偏差を求める
declare @varp float
select @varp=STDEVP(c_point) from @tbl1
select @varp

--平均点との差に10をかけ標準偏差で割り+50する
declare @tbl2 table(c_point int, c_standardscore float)
insert into @tbl2 select c_point, ((c_point-@avg)*10)/@varp+50 from @tbl1
select * from @tbl2
SQLで偏差値を求めた結果

SQLで偏差値を求めた結果

以上、「Sql Server 偏差値の求め方」でした。

SQL Server 標準偏差: STDEVP, STDEV

標準偏差: STDEVP, STDEV

標準偏差とは、データの平均値から見た「ばらつき具合」を数値で表したもので、標準偏差の値が小さいほど、散らばり度合いが小さいことが示されます。

指定したデータが、全てであるデータの値がとる標準偏差(standard deviation) が欲しい場合、STDEVP 関数を使います。
指定したデータが、全体の内の「標本」(抜き出した一部分)として考え、そのデータの値がとる標本標準偏差(sample standard deviation) が欲しい場合、STDEV 関数を使います。

STDEVPの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータの数で割る(分散)
・分散の平方根を求める

STDEVの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータ-1の数で割る(*日本工業規格)(標本分散)
・標本分散の平方根を求める
以上となりますが・・・

「標準偏差」や「分散」という言葉自体をあまり聞いたことのない方にとっては、何を言っているのか、非常に難しい説明と感じることでしょう。
わかりづらいと感じた方は、次のように覚えてください。

「計算された数値が、小さいほどデータのばらつきが少ない」
という意味で、つまり、出てきた数値が「0」に近いほどばらつきの無いデータということが分かる手法になります。

標準偏差のよいところは、標準偏差は単位の次元がデータと同じなのでデータの散らばり具合が把握しやすいと言えます。

STDEVP

構文:STDEVP( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
   DISTINCT 重複する値は 1 つだけ有効データとします。
   expression 整数式です。 集計関数とサブクエリは使用できません。

戻り値の型は、float です。

下のSQL例文を載せておきます。

declare @tbl1 table(c_point int)
insert into @tbl1 (c_point) values (30)
insert into @tbl1 (c_point) values (40)
insert into @tbl1 (c_point) values (20)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (70)
insert into @tbl1 (c_point) values (80)

--ALL
--NULLはカウントされません
select STDEVP(c_point) as [STDEVP] from @tbl1

--DISTINCT
--60が重複しているので結果が異なります
select STDEVP(DISTINCT c_point) as [STDEVP_DISTINCT] from @tbl1

-- STDEVP(c_point)を検証
--平均値を算出する
declare @avg float
select @avg=AVG(cast(c_point as float)) from @tbl1

--各データと平均値の差を求める
declare @tbl2 table(c_point float)
insert into @tbl2 select c_point-@avg from @tbl1

--各差を2乗して
update @tbl2 set c_point=c_point*c_point

--2乗した全ての求めた数値を足す
declare @sum float
select @sum=sum(c_point) from @tbl2

--データの数で割る
declare @varp float
select @varp=@sum/count(c_point) from @tbl2

--平方根を求める
select sqrt(@varp) as [STDEVP(c_point)検証値]
STDEVP 結果

STDEVP 結果

STDEV

構文:STDEV( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
   DISTINCT 重複する値は 1 つだけ有効データとします。
   expression 整数式です。 集計関数とサブクエリは使用できません。

戻り値の型は、float です。

下のSQL例文を載せておきます。

declare @tbl1 table(c_point int)
insert into @tbl1 (c_point) values (30)
insert into @tbl1 (c_point) values (40)
insert into @tbl1 (c_point) values (4)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (80)

--ALL
--NULLはカウントされません
select STDEV(c_point) as [STDEV] from @tbl1

--DISTINCT
--60が重複しているので結果が異なります
select STDEV(DISTINCT c_point) as [STDEV_DISTINCT] from @tbl1

-- VAR(c_point)を検証
--平均値を算出する
declare @avg float
select @avg=AVG(cast(c_point as float)) from @tbl1

--各データと平均値の差を求める
declare @tbl2 table(c_point float)
insert into @tbl2 select c_point-@avg from @tbl1

--各差を2乗して
update @tbl2 set c_point=c_point*c_point

--2乗した全ての求めた数値を足す
declare @sum float
select @sum=sum(c_point) from @tbl2

--データの数で割る
--各観測値の平均値からの偏差の二乗の和を観測個数から1を引いた数で割ったばらつきの尺度
declare @var float
select @var=@sum/(count(c_point)-1) from @tbl2

--平方根を求める
select sqrt(@var) as [STDEV(c_point)検証値]
STDEV 結果

STDEV 結果

以上、SQL Server STDEV, STDEVP 標準偏差でした。

SQL Server 分散: VARP, VAR

分散: VARP, VAR

分散とは、データの平均値から見た「ばらつき具合」を数値で表したもので、数学などでは統計学や確率論にて用いられる手法の1つです。

指定したデータが、全てであるデータの値がとる分散(variance) が欲しい場合、VARP 関数を使います。
指定したデータが、全体の内の「標本」(抜き出した一部分)として考え、そのデータの値がとる標本分散 (sample variance) が欲しい場合、VAR 関数を使います。

VARPの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータの数で割る

VARの数値の求め方は、
・平均値を算出する
・各データと平均値の差を求める
・各差を2乗して
・2乗した全ての求めた数値を足す
・最後にデータ-1の数で割る(*日本工業規格)
以上となりますが・・・

「分散」という言葉自体をあまり聞いたことのない方にとっては、何を言っているのか、非常に難しい説明と感じることでしょう。
わかりづらいと感じた方は、次のように覚えてください。

「計算された数値が、小さいほどデータのばらつきが少ない」

という意味で、つまり、出てきた数値が「0」に近いほどばらつきの無いデータということが分かる手法になります。

VARP

構文:VARP( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
   DISTINCT 重複する値は 1 つだけ有効データとします。
   expression 整数式です。 集計関数とサブクエリは使用できません。

戻り値の型は、float です。

下のSQL例文を載せておきます。

declare @tbl1 table(c_point int)
insert into @tbl1 (c_point) values (30)
insert into @tbl1 (c_point) values (40)
insert into @tbl1 (c_point) values (4)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (60)
--insert into @tbl1 (c_point) values (NULL)
insert into @tbl1 (c_point) values (80)

--ALL
--NULLはカウントされません
select VARP(c_point) as VARP from @tbl1

--DISTINCT
--60が重複しているので結果が異なります
select VARP(DISTINCT c_point) as VARP_DISTINCT from @tbl1

-- VARP(c_point)を検証
--平均値を算出する
declare @avg float
select @avg=AVG(cast(c_point as float)) from @tbl1

--各データと平均値の差を求める
declare @tbl2 table(c_point float)
insert into @tbl2 select c_point-@avg from @tbl1

--各差を2乗して
update @tbl2 set c_point=c_point*c_point

--2乗した全ての求めた数値を足す
declare @sum float
select @sum=sum(c_point) from @tbl2

--最後にデータの数で割る
select @sum/count(c_point) as [VARP(c_point)検証値] from @tbl2
VARP 結果

VARP 結果

VAR

構文:VAR( [ ALL | DISTINCT ] expression )
引数:ALL すべての値にこの集計関数を適用します。 ALL は既定値です。
   DISTINCT 重複する値は 1 つだけ有効データとします。
   expression 整数式です。 集計関数とサブクエリは使用できません。

戻り値の型は、float です。

下のSQL例文を載せておきます。

declare @tbl1 table(c_point int)
insert into @tbl1 (c_point) values (30)
insert into @tbl1 (c_point) values (40)
insert into @tbl1 (c_point) values (4)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (60)
insert into @tbl1 (c_point) values (80)

--ALL
--NULLはカウントされません
select VAR(c_point) as VARP from @tbl1

--DISTINCT
--60が重複しているので結果が異なります
select VAR(DISTINCT c_point) as VARP_DISTINCT from @tbl1

-- VAR(c_point)を検証
--平均値を算出する
declare @avg float
select @avg=AVG(cast(c_point as float)) from @tbl1

--各データと平均値の差を求める
declare @tbl2 table(c_point float)
insert into @tbl2 select c_point-@avg from @tbl1

--各差を2乗して
update @tbl2 set c_point=c_point*c_point

--2乗した全ての求めた数値を足す
declare @sum float
select @sum=sum(c_point) from @tbl2

--最後にデータの数で割る
--各観測値の平均値からの偏差の二乗の和を観測個数から1を引いた数で割ったばらつきの尺度
select @sum/(count(c_point)-1) as [VAR(c_point)検証値] from @tbl2
VAR 結果

VAR 結果

以上、SQL Server VAR, VARP 分散関数でした。

SQL Server 便利な日付関数:DATEADD DATEDIFF

SQL Server 便利な日付関数:DATEADD DATEDIFF

Sql Server は、日付の演算を行える関数を2つ実装しています。

DATEADD

DATEADDは引数に指定した日時要素*間隔分を日時に加算(減算)する関数です。
DATEADD(日時要素, 間隔, 日時)
日時要素は、以下のように指定します。
 年:year, yy, yyy
 四半期:quarter, qq, q
 月:month, mm, m
 日:dayofyear, dy, y, day, dd, d
 週:week, wk, ww
 時:hour, hh
 分:minute, mi, n
 秒:second, ss, s
 ミリ秒:millisecond, ms
 マイクロ秒:microsecond, mcs
 ナノ:nanosecond, ns

間隔は、整数値で指定します。加算ならそのまま、減算なら負の整数値で指定します。
日時は、演算を行いたい日付型データです。

以下の例は、現在日時に対し、いくつかの演算を行っています。

declare @dd datetime
set @dd = getdate()

--DATEADD
select '--基準日--' as 加算データ, @dd as 結果
union all
select '1年プラス', DATEADD(year, 1, @dd)			--1年プラス
union all
select '1年マイナス', DATEADD(year, 1, @dd)		--1年マイナス
union all
select '1月プラス', DATEADD(month, 1, @dd)			--1月プラス
union all
select '1月マイナス', DATEADD(month, -1, @dd)		--1月マイナス
union all
select '1日プラス', DATEADD(day, 10, @dd)			--1日プラス
union all
select '1日マイナス', DATEADD(day, -10, @dd)		--1日マイナス
union all
select '1時間プラス', DATEADD(hour, 1, @dd)		--1時間プラス
union all  
select '1時間マイナス', DATEADD(hour, -1, @dd)		--1時間マイナス
union all  
select '1分プラス', DATEADD(minute, 10, @dd)		--10分プラス  
union all  
select '1分マイナス', DATEADD(minute, -10, @dd)	--10分マイナス  
union all  
select '30秒プラス', DATEADD(second, 30, @dd)	--30秒プラス
union all  
SELECT '30秒マイナス', DATEADD(second, -30, @dd)	--30秒マイナス
DATEADD 結果

DATEADD 結果

DATEDIFF

DATEDIFFは、指定した日時要素単位で 2 つの日付の時間間隔を調べることができます。たとえば、2 つの日付の間の日数や、現在から年末までの週の数などを求めることができます。
DATEDIFF(日時要素, 開始日時, 終了日時, [,firstdayofweek or firstweekofyear])

下の例で @dend に設定する数値を替えいろいろ試して挙動を確認してください。

declare @dstart datetime
declare @dend datetime

set @dstart = getdate()
set @dend = dateadd(day, 100, @dstart)
select @dstart as 開始日時, @dend as 終了日時 

select 'DATEDIFF(year, @dstart, @dend)' as 式, DATEDIFF(year, @dstart, @dend) as 差
union all
select 'DATEDIFF(month, @dstart, @dend)', DATEDIFF(month, @dstart, @dend)
union all
select 'DATEDIFF(week, @dstart, @dend)', DATEDIFF(week, @dstart, @dend)
union all
select 'DATEDIFF(day, @dstart, @dend)', DATEDIFF(day, @dstart, @dend)
union all
select 'DATEDIFF(hour, @dstart, @dend)', DATEDIFF(hour, @dstart, @dend)
union all
select 'DATEDIFF(minute, @dstart, @dend)', DATEDIFF(minute, @dstart, @dend)
DATEDIFF 結果

DATEDIFF 結果

以上、「SQL Server 便利な日付関数:DATEADD DATEDIFF」でした。

Windows Chrome Sleep 後にホストを解決しています

Windows Chrome Sleep 後にホストを解決しています

ここひと月くらいの現象なのですが、Windows を sleep させた、もしくは勝手に sleep したから復帰後の Chrome の動作が「ホストを解決しています」となって応答がなくなります。
私の PC だけの現象かどうかもよくわからないのですが、「ホストを解決しています」となって応答がなくなります。

で、コマンドプロンプトで nslookup で www.yahoo.co.jp を問合せると即答で帰ってきます。
念のため、Microsoft Edge でwww.yahoo.co.jp を開くと即表示されます。

このことから、この現象は Chrome 固有の現象と思われます。

Chrome ホスト解決

chrome://net-internals/#dns

Chrome はどうやら独自でDNSをもっているようです。
chrome://net-internals/#dns

Chrome net-internals-dns

Chrome net-internals-dns

www.yahoo.co.jp を検索すると、ちゃんとあります。

Chrome net-internals-dns-yahoo

Chrome net-internals-dns-yahoo


気になるのは、TTL がマイナスになっており、Expired となっているあたりですが、chrome の DNS を clear 後再アクセスすると正常なようですので問題はなさそうです。
Chrome net-internals-dns-yahoo DNS削除後再アクセス

Chrome net-internals-dns-yahoo DNS削除後再アクセス

仕組みは良くわかりませんが、chrome は自分の DNS を使っていると言うことでしょうか?
非同期DNS設定は、内部 DNS クライアントが有効:false となっているのですが、これも良くわかりません。

ちなみに同じように chrome のホストを解決で遅延が出ている人の解決策を見ると、
・chrome の DNS を clear
・Windows の DNS を clear
これで解決できる時もあると出ているのですが、私の場合の Sleep 後に「ホストを解決しています」では改善されませんでした。

URL(ホスト名)でなく、IPアドレスでアクセス

ホスト名が解決できないのなら、URL(ホスト名)でなく、IPアドレスでアクセスしてみたらどうなるか?
やってみました。

Chrome IPアドレスでアクセス

Chrome IPアドレスでアクセス


結果は、「ホストを解決しています」が表示されないだけで、全く同じタイミングで待たされました。

このことから、本当の原因はホストを解決ではないと推測されます。

本当の原因

sleep からの復帰後、2分ほど放置してからアクセスしてみました。
正常に即表示されます。

どうしてここひと月くらいで待たされるようになったのか分かりませんが、chrome の変更でも有ったのでしょう。
シャットダウンしてから立ち上げたときは、遅くならないので sleep 絡みでなにかありそうです。

本当の原因は、高速化させるために事前に fetch でもしていると言うところでしょうか?
であれば、「ホストを解決しています」は、今アクセスしている URL のホストを解決しているのでなく、全体の事前準備の時間と捉えられるかもしれません。
高速化のために、sleep 復帰からの30秒くらいの時間はその代償ということにしておきましょう。

以上、「Windows Chrome Sleep後にホストを解決しています」についてでした。

追伸
本当に DNS が解決出来ていない時もたぶん同様の内容でメッセージが出ると思います。
その場合は、
1)コマンドプロンプトを開く
2)nslookup www.yahoo.co.jp

nslookup

nslookup


で、IPアドレスが正常に表示さなければ、DNS が解決できていないことになります。

また、
1)コマンドプロンプトを開く
2)ipcongif
で、IPアドレスが正常に取得されていないようであれば、そもそもルーターと接続出来ていない状態です。

ipconfig

ipconfig

上の方法で大まかなネットワーク障害の切り分けをしてください。