ブロッコリーを克服するまでプログラミング

プログラミングとか趣味とかを報告します。

SQLServer : アロケーションサイズでDBチューニングできているのか。

※いつも書いてますが、適当人間の記事なので、参考にしないでください。

※webRTCの記事のアクセスのみが増え、「あっやべ、あんな適当な記事にしちゃった」と常日頃思っています。

 

 先輩から「データベース配置するパーティションアロケーションサイズは64KB。これ常識な。」って言われて、「えっ、早くなるんですか?」って訊いたら「やったことないから知らん。」って言われたのはいつのことか。

 

 原理的にはなんとなくわかるんです。SQL Server でデータベースを作成するとき、「64KB単位」っていう文字列が出てくるんですよね。つまり、データの単位が64KBなんだから、アロケーションサイズも64KBなら、IOコスト的にWIN-WINでしょ!っていうことなんですよね!たぶん!

f:id:atwtama:20180216233344p:plain

  

 まず、パーティションを適当に割ります。Iドライブ(64KB)とJドライブ(規定4096)に割りました。

f:id:atwtama:20180216233724p:plain

 

 次に全く同じデータベースを2つ作成します。片方はIドライブに、片方はJドライブに配置しました。

※ 下図みたいにコア数でデータベースファイルの数をどうこうとかも見た記憶がありますが、これをするかしないかで変わるかも調べてみたいです。

f:id:atwtama:20180216233859p:plain

 

 テーブルはこんな感じにしました。あるあるなんですが、「きれいなデータを挿入しても現地で役に立たない」というのは無視で、適当に20万行INSERTしました。

f:id:atwtama:20180216234251p:plain

 

 それでは、単純明快なSELECT文を適当に実行すると・・・

f:id:atwtama:20180217000614p:plain

64KBアロケーションサイズのほうがなんか早い・・・。と思ったけど、条件とかで変動するし、研究が必要そう。

 

 なんか微妙だったので、50万行ずつを3テーブルにINSERTし、OUTER JOIN したものをSELECT してみたところ、同様にざっくり 1 : 2 くらいの速度であった。

つまり、

64KBアロケート >= 規定値アロケート

なのである!(たぶん)

 

SQL Server 2016 環境構築時のパフォーマンスに関するベストプラクティス – Microsoft Japan Data Platform Tech Sales Team Blog

 

もはや私生活を書く

更新せずに100日が経ってしまいました・・・。

 

いつもブログを更新しようとは思っているのですが、やはりプログラミングとか、なにかを導入した、とかいう話になると「仕事」と関連してしまう気がし、それはモラル的にどうなのかと思い、葛藤のまま、更新していませんでした。

仮に記事を書いたとしても、ぼやかして書いたりして、結局意味もないような気がしますし。

かけそうなことといえば、Let's Encrypt で無料のSSL証明書を発行したことくらいですかね・・・。(といっても、十二分にネットに資料がある。)

 

家に帰っても、家事→youtube→寝る、だからとくに記事にできることもなく・・・。

自転車でどこかに行くというのも、家庭のこととかでなかなかいけません。

 

本日記事を書いているのも、いつとはなしに有給を取得したからでして。

本当はマイナンバーカードとかを作成しようと思っていたのですが、どうやら面倒くさいみたいです。

私は役所で2時間くらい頑張れば作成できるものとばかり思っていましたが、そんなことはまるでないのですね・・・。

やはり一番面倒くさいのが、写真を用意することです。

デジカメでもOKと書かれているのですが、いざ「顔写真のチェックポイント」というところをみると、どのように加工すればよいのかなどが書いていません。

(アップロードしたときに座標指定できるのかな・・・。)

面倒くさいので、また今度にします。

 

なので、とりあえず、積み立てNISAの登録でもしてきます。

投資に興味はないのですが、妻が気になっているようなので、断腸の思いで月1万円を投資します。

 

何か書くことがあればいっぱい書くのになぁ。

基本情報技術者試験の勉強をしていました

しばらく長期出張や資格勉強をしていたため、更新していませんでした!!!資格といってもいまさら、基本情報技術者試験です!!!!!!!

 

発端は4月ごろ。「私も情報系の資格をとっていこう!!!」と決心し、突発的にITパスポートに挑んで、なんとか受かりました。基本情報もなんとかなると思っていましたが、一か月くらい前に参考書を読んで焦りました。まったく、わからないのです。特に午後が、わからないのです。

 

私は昔から教科書を読んでの勉強をほとんど行わず、過去問だけを淡々と解いてわからなかったら回答を読むというクソみたいな付け焼刃勉強法で高専・大学に行きました。この勉強方法については昔からだめだと思っていました。勉強したはずの知識が後に全く残らないのです。基本情報技術者試験の勉強をせっかく行うなら三か月前からきっちりやって頭の中に残しておこうと思っていたのに、気づいたら一か月前になっていたのです。仕事していたら仕方ないですよね。(言い訳)なので、封印していた付け焼刃勉強法で挑みました。具体的には下記のような感じです。

 

〇 9月半ば

・仕事終わり後、午前を30問前後解く → 回答を読む → パソコンで遊ぶ → 終わり

・仕事終わり後、午後の大問3つくらい解く → 回答を読む → パソコンで遊ぶ → 終わり

 

〇10月初め

・焦る。焦るのに一週間出張!出張中は勉強する!!! → 熱が出てホテルで寝込む

 

〇テスト直前

・パソコンを封印するため、土日に妻を放置してオサレカフェに一人出陣する。なんやかんや少しずつ解いていたら過去5回分を(超適当に)やれた。

 

そしてテスト当日・・・。私は上述のような最低限の勉強しか行ってないため、午後の最終選択問題については、アルゴリズムがわからなければ詰むという状態でした。(JAVAアセンブラ高専で単位を取ったくらいだったので、完全無視☆)午前はまぁまぁといった感じで、見直しまでやって時間が結構あまりました。そして迎えた午後。私は一応、DB技術者なのでSQLについては速攻でわかったのですが、得意のアルゴリズムがなぜか理解できませんでした。なぜか脳内で辻褄があわなかったのですが、とりあえず「常識的にこれだろ」みたいなのを選択して、試験を終えました。全く自信はありませんでしたが「あああああああああああ」とか「いいいいいいいいいいいい」とか妻に言いながら自己採点をすると、なんやかんや午前午後共に80パーセントを超えていました。回答ズレが発生しなかったら受かっているはずです。

 

次は応用情報技術者試験に挑もうと思っているのですが、来期は仕事の都合上受験が難しいため、一年後になるかも・・・。最終的にはDBスペシャリストを取得したいが、いつ取得できるのか。情報セキュリティマネジメント試験も合格率79パーセントとか書いてるけど、とりあえず受けてみたい。

自転車:Master-X Light

このブログでは遊戯王とかプログラミングとかしか記事としてあげていませんでしたが、私の一番の趣味は一応自転車ということになっています。※しかし、普段乗る自転車はママチャリです。

 

愛車はCOLNAGO Master-X Lightです。スペック追及はせず、ただただつけたいものをつけたという代物です。こだわりはちょくちょく見せる意味不明なイタリアカラーです。といっても、銀色のシートポストがアルテグラのシートポストしかなくて、アルテグラの印字を消すためにエアブラシで塗装しただけなのですが・・・。

 

最近、あまり遠出していないので、もうちょっと遠出できたらいいなぁ。なお、レースガチ勢とかではないので、カスタマイズする予定もないです。(そうじゃないならカーボン買ってる)

 

f:id:atwtama:20170911232153j:plain

 

 

Javascript:IEの互換モードで画像のウィンドウ中央揃えをする

※当記事は頭の悪いやり方を行っている可能性があるので、温かい目で見ていただけると幸いです。

 

様々なわけがあり、IEの互換モードで画像(対象は画像ではないのですが、本稿では画像として扱います)のウィンドウ中央揃えを行いたくなりました。調べてみた限り、いろいろな方法があるんだと思いますが、私が妄想で書いたJavascriptを記録で残しておきます。

 

イメージとしてはこんな感じです。(わかりにくかったらすみません)現在のウィンドウサイズと中央揃えしたい要素のサイズがわかれば、ウィンドウ中央への表示ができるのです。しかし、IEの互換モードでは、innerWidthやinnnerHeightが使えないので、allObject(height:100%, width100%)の要素を無理に作り、こいつのサイズを取得することで、間接的にウィンドウサイズを取得しました。

 

しかし、この方法では、中央揃えしたい要素よりもウィンドウサイズが小さくなってしまった場合、中央揃えしたい要素が画面外に配置されてしまいます。そのため、中央揃えしたい要素よりウィンドウサイズが小さかった場合の処理も追加しました。

 

f:id:atwtama:20170903234351p:plain

 

 // JAVASCRIPT ***********************************************************************************************************************

window.onresize = moveObject;

function moveObject(){
 var tmpWidthPos = parseInt(document.getElementById('allObjects').offsetWidth, 10);
 var tmpHeightPos = parseInt(document.getElementById('allObjects').offsetHeight, 10);

 if(tmpWidthPos <= document.getElementById('mainImg').offsetWidth){
  document.getElementById('allObjects').style.left = parseInt(document.getElementById('mainImg').offsetWidth, 10);
 }else{
  document.getElementById('allObjects').style.left = '50%';
 }

 if(tmpHeightPos <= document.getElementById('mainImg').offsetHeight){
  document.getElementById('allObjects').style.top = parseInt(document.getElementById('mainImg').offsetHeight, 10);
 }else{
  document.getElementById('allObjects').style.top = '50%';
 }
}

// 読み込み時にレイアウトを変更するため
window.onload = function(){
 moveWindow();
}

// CSS *******************************************************************************************************************************

#allObjects{
 position:absolute;
 margin: -300px 0 0 -400px;
 height:100%;
 width:100%;
 top:50%;
 left:50%;
}

#mainImg{
 position:absolute;
 top:0px;
 left:0px;
 width:800px;
 height:600px;
}

// HTML ******************************************************************************************************************************

<body>
 <div id = "allObjects">
  <p><img id = "mainImg" src="./image/test.png" /></p>
 </div>
</body>