投稿

2018の投稿を表示しています

SQLServerのインデックスを使用したパフォーマンスチューニングについて

こんにちは。福岡事務所の大迫です。

ソフトウェア開発においてデータベースは非常に重要な役割を果たします。
多くのソフトウェア、アプリケーションには何らかの形でデータベースが使用されており、データベースに対する実行命令であるSQLがプログラムに組み込まれています。
作成したアプリケーションの動作速度に問題が生じた際にSQLが原因となる場合も多く、データベースの設計、SQLの記述には細心の注意が必要です。
データベースの種類(Oracle,SQLServer,MySQL等)によって考え方が若干異なることがあり、幅広い知識が必要とされます。

実際にSQLの実行速度に問題があった場合、どのように対処するのが効率的かを普段業務で使用しているSQLServerの例を簡単に説明したいと思います。
SQLのチューニングには様々な手法がありますが、最も影響が大きいのはインデックスを使用する方法です。

インデックスとはその名の通りデータがどの場所にあるかを示す索引です。
辞書の索引をイメージするとわかりやすいと思います。
例えば辞書で「パフォーマンス」の意味を調べる場合は「索引を開く」→「ハ行を探す」→「目的のページを開く」という手順を踏むと思います。
索引が適切に掲載されていれば辞書の厚さ(データ量)がどれほど多くても検索に掛かる手間(処理時間)は変わりません。
インデックスを適切に設定、利用することはSQLのパフォーマンスを向上させる上で欠かせません。

SQLServerのインデックスには「クラスター化インデックス」と「非クラスター化インデックス」があります。

クラスター化インデックスはテーブルに対して1つしか設定できませんがデータが並び替えられて格納されるため高速に検索することができます。
特に指定していなければプライマリーキーはクラスター化インデックスで作成されます。

非クラスター化インデックスはテーブルに対して複数設定できますが、並び替えは行われない為、クラスター化インデックスに対して検索速度が遅くなります。
特に指定していなければユニークキーは非クラスター化インデックスで作成されます。

作成したインデックスの使用状況を知るためには、SQLServerで管理ツールの実行計画を使用します。
実行計画に表示される情報で特に注意すべき検索方法は以下の3種類です。
・Index S…

DNSフェイルオーバー

イメージ
Markdown to HTML

ソフトウェア長期保守のための仮想化環境について

こんにちは。福岡事務所の石橋です。

ソフトウェア開発では、OSのサポート期限が切れても長期保守が求められる場合があります。
(業務用ソフトウェアが想定よりはるかに長い期間使われるのは、よくある事です)

このような場合、例えばWindows XPやWindows 7(2020年1月にサポート期限が切れます)の開発環境を残しておく必要が出てきますが、サポート期限の切れたOSはセキュリティパッチが提供されなくなるため、インターネットに接続するのは危険です。また、古いPCを開発環境として残しておいても、故障などでそれが失われてしまうリスクがあります。


そこで重宝するのが、仮想化環境です。
仮想化環境とは、簡単に説明すると「ホストOS上で(仮想的な)別のゲストOSを動作させる」ものです。
例えば、Windows 10(ホストOS)上でWindows 7やWindows XP(ゲストOS)を動かすことができます。

Windows 7(Professional版以上のみ)では、「Windows XP Mode」という仮想化環境が無償で提供されていました。これはWindows XPのライセンスを含んでいて、初めからXPインストール済みの状態で利用できます。

一方、Windows 8/8.1/10(Pro版以上のみ)については、「Hyper-V」という仮想化環境が無償で提供されていますが、ゲストOS及びそのライセンスは同梱されていません。ゲストOSのライセンスと、OSインストール作業が別途必要です。
また、PCに付属のWindows(OEMライセンス)は他のPCで使うことができません。
古いWindowsは入手が難しくなるため、あらかじめ確保しておくことが大切です。


ソフトウェア開発は、リリースや検収までで完了ではなく、その後には保守があります。
保守契約が有効な間は開発環境も残っているものですが、お客様の要望により、保守期間満了後も改修や不具合対応が必要になるパターンが意外と発生します。
あらかじめ仮想化環境を活用して備えておくことで、こういった場合に困らない体制を作ることが可能です。
皆さまもこの機会に、仮想化環境の構築を試してみてはいかがでしょうか?

Raspberry PiでIoTをはじめてみませんか?

こんにちは。
熊本事務所の庄村です。

さて、このブログをご覧の皆さん、IoTという言葉はご存知でしょうか?
ネットやテレビなどのメディアを通じて、一度は見聞きしたことがあるかもしれません。

昨年2017年はIoT元年ともいわれており、
IT系界隈ではこの分野での動きが大変盛んになっています。

今回は、このIoTについて簡単にご紹介した上で、
IoTの自作がしやすいと注目されている超小型のコンピュータ
「Raspberry Pi」について、特にご紹介したいと思います。


<IoTとは?>
IoTは「Internet of Things」の略で、「モノのインターネット」とも呼ばれています。
"アイオーティ"と読みます。

IoTの一例を挙げますと、
外出先から部屋の状況(温度、湿度)などを確認出来るIoT温度計などがあります。
上記の場合、センサーが検出した情報をサーバーに送信・蓄積、
サーバーデータを利用者の端末上で表示しています。

尚、上記の例は、IoTのほんのごく一部であり、実際にはもっと多種多様な活用例があります。
興味をお持ちの方は、IoT 活用 事例などのキーワードでWeb検索してみてください。


<Raspberry Piとは?>
前述のIoT説明では、センサーが検出した情報をサーバーに送信~、としておりましたが、
そこで、センサーとサーバー間の仲立ちの役割を果たすのがRaspberry Piになります。

Raspberry Piは、ラズベリーパイと読み、
英国のRaspberry Pi財団が開発したシングルボードコンピュータのことです。
日本では、ラズパイの愛称で親しまれています。

大きな特徴として超小型で低価格、標準でLANも搭載しており、
各種センサーなどを直接繋ぐことが出来る汎用I/Oポート(GPIO)を搭載している点があります。
このため、Raspberry PiはIoTの自作がしやすいとされています。

尚、Raspberry Piについては、少しWeb検索してみただけでもたくさんの使用例・活用例が出てきます。
また、Raspberry Piはその汎用性の高さから、IoTに限らずホビー目的で利用されている方もたくさんおられます。
海外の例では、Raspberry Piでスターウォーズの「R2-D2」を作った…

LINQを使用し、ソースコードの可読性を高める

こんにちは。福岡事務所の荒平です。
今回はソースコードの可読性を高める方法について説明していきたいと思います。

例えばC#で二つのDataTableを比べ、片方のTableにだけ存在するデータを取得したい、
というとき、皆さんはどのようにして処理を書きますか?

-------------------------------------------------------

TableATableB
 果物  在庫数 果物  在庫数
リンゴ    100リンゴ  130
ミカン  120バナナ  120
バナナ  140ブドウ  150
ブドウ  150

このTableAとTableBを比べ、TableAにしか存在しない果物(ミカン)のデータのみを取得したい

-------------------------------------------------------

いくつか方法はありますが、このように考えた方もいるのではないのでしょうか?

・for文やforeach文などを二重にループさせ、
 if文などで果物が両方に存在するかどうかを判定する

しかし、この方法だと以下のようなデメリットがあります。
1. ネスト構造になるため、他の人が見た場合、可読性が低くなる
2. if文が必要になったり、あらかじめTableのレコードの並び順が決まっていないといけないなど、余計なコードが増えたり、前提条件が必要になる

そこで、こういった問題を解決するために最近のC#ではLINQを使用します。
ちなみにLINQとはLanguage INtegrated Query(統合言語クエリ)の略で、
データの集合から特定のデータのみを取得したり、検索や集計などをしてくれる機能です。

ということでさっそくLINQを使用してみましょう。

-------------------------------------------------------

 var Record = (from rowA in TableA.AsEnumerable()
       where !((from rowB in TableB.AsEnumerable()
              select rowB["果物"]).Contains(rowA["果物"]))
  …

CentOSとUbuntuの違い

こんにちは。熊本事業所ヘルスケア事業部の上田です。
今回は、"CentOS"と"Ubuntu"について簡単に紹介したいと思います。

そもそもこの2つはLinuxのディストリビューションと呼ばれる種類を指しています。
Linuxのディストリビューションは似ているようでも全くの別物なので、
どういった特徴があるか?どういった用途向けなのか?と気になる方もいらっしゃるのではないかと思います。
その中でも知名度が高く、昔から使われているCentOSとUbuntuをメリットデメリットに分けて解説したいと思います。


【CentOS】
CentOSはRHEL(Red Hat EnterPrise Linux)と完全互換を目指したオープンソースのLinuxディストリビューションです。
RHELは商用サポート(有償)のあるLinuxディストリビューションです。
シェアはLinux全体の約2割で、用途はRHELと同様企業のサーバーとして利用されていることが多いです。

メリットはサポート期間が最大で10年間と長い為、構築が古くなった環境でも安定して使用出来る点と、
日本語の情報量が多いのでわからない部分があっても調べやすい点です。
デメリットはコマンドによる操作がメインとなるため、知識がないと操作がしにくい点です。


【Ubuntu】
初心者向けに人気が高いLinuxディストリビューションです。
名称は南アフリカのズールー語で"他者への思いやり"を意味しています。
シェアはLinux全体の約4割で、こちらはデスクトップ用途で使われるケースが多いです。

メリットはコマンド操作がほぼ不要で、WindowsやMacと同じ感覚で使用出来る点と、
半年ごとのバージョンアップが行える為、常に最新の状態で利用出来る点です。
デメリットはCentOSと比べてサポート期間が最大でも5年間と短い為、
セキュリティ面を考慮するとバージョンアップを早めに検討しなければいけない点です。


今回紹介したLinuxは2つとも無償で提供されていますので、手軽に使用できるのも利点です。
他にも紹介していないLinuxがありますが、自分の用途に合ったLinuxを使って新しい世界へ飛び込んでみましょう。

サーバの中の魔法のランプ

こんにちは、熊本事務所のau48です。
サーバ構築のアレコレやLinux絡みの記事を発表していきます。

LAMPという言葉をご存知でしょうか。
あの魔法のランプと同じ綴りです。

Webサービスの開発を行う場合、まずは"環境"を構築しなければいけません。
いわゆるサーバのことなのですが、それって何でできてるの?
という質問に対しての答えが"LAMP"です。

LAMPとは次のOSやミドルウェアの頭文字を取ったものです。

L...Linux
OS。WindowsやMac(現macOS)が有名ですがLinuxも歴史の古いOSです。
ハードウェア含めてコンピュータの基本的な制御を行います。

A...Apache
WEBサーバ。コンピュータ内のファイルを外部(インターネット)に公開したり、
外部からの要求でプログラムを実行して表示したりしてくれます。

M...MySQL
データベース。ユーザーの情報やその他諸々の情報を蓄積します。
プログラムを通して中身を追加、編集することができます。

P...PHP(ほかにもPerl、Pythonなど)
プログラミング言語。Webサイトにログイン機能を追加したり、
問い合わせフォームを設置したり...いろいろなことができます。

この"LAMP"というソフトウェア構成は非常に長い間採用されています。
最近ではLinuxにかぎらずWindowsやMacを使ったり、
ApacheはNginxというソフトを使うこともあるようですが、基本は同じです。

なぜこの構成かというと、これらすべてはオープンソースであり誰でも無償で利用、
また改良することができるからです。
世界中のユーザーによって日々改良、更新が行われており非常に質の高いソフトウェアなのですが、
その反面サポート窓口や保証はありません。
トラブル対応で困ったときは自分で情報を収集して解決しなければいけないという点にはご注意を。

簡単にWEBの世界に飛び込める、魔法のLAMPで願いを叶えましょう。

以上、LAMPについてのお話でした。

AWSの消し忘れ

こんにちは、熊本事務所の菊池です。
先月ほど、社内の研修でAWSは料金が怖くて手が出せないという話がありました。
しかしながら、AWSの一部サービスは毎月ある程度の時間は無料で動かせたりします。
そのため学習で軽く動かす程度ならお金は掛かりません。
そこで、私個人のアカウントでどれだけ料金がかかっていたか確認することにしました。
各機能をざっと触ったぐらいなので500円にも満たないはずです。

11月合計:$46.44

こんなはずではなかった。
明細を見ていくとEC2とRDSが課金の大半を占めていた様子。

詳細(一部抜粋)
 EC2
  EC2稼働(Unix) :$0.18
  ロードバランサー :$17.51
 RDS
  MySQLインスタンス :$11.34
 S3
  リクエスト  :$0.02
  ストレージ容量 :$0.01

ロードバランサー配下のEC2インスタンスは、お試しで使った後すぐ止めたはずでした。
が、明細に記録された利用時間は1ヶ月フル稼働の約720時間。
ちゃんと消したはずなのになぜ?

後で調べた結果、配下にEC2インスタンスがなくてもロードバランサーは単体で動いており、アクセスが無くても稼働はしているので料金がかかるということが分かりました。
つまり、EC2インスタンスだけでなくロードバランサーも削除する必要がありました。
11ドル請求されたRDSも似たような感じで、DBインスタンスを"停止"はさせましたが"削除"はしなかったため、残っていたストレージの利用料金を取られています。
また、RDSインスタンスの停止は最大7日までという制約があり、知らない間に稼働していた分の請求も見られました。
色々な無駄が発覚しましたが、これらのミスが無ければ全料金が差引き4ドルに満たないことも判明。
母親が無駄に電気を使うなと言っていた理由が分かった気がしました。
AWSはお金がかかるのか?結果としてはお金がかかってしまいました。
正しく使うことができれば安価で色々できるとは思います。

皆さんも不要なAWSリソースは、こまめに消すように気を付けましょう。

ASD、ブログはじめるってよ。

はじめまして、ASDの鮫島です。
ASDでは、従来よりのWindowsアプリケーションの開発に加え、AWSを活用したシステム開発を行なっています。 ■開発実績
今までの開発経験やこれからの開発において得た知識・ノウハウを積極的にアウトプットしていくため、技術系ブログを始めることとなりました。
ブログは継続して更新していくのが難しいところもありますが(ちょっと弱気)、こまめに更新していけるよう頑張っていきたいと思うのでよろしくお願いします。
また、ASDではエンジニアを募集しています。 興味のある方はぜひご連絡ください。