この記事は SAP Advent Calendar 2019 の12月10日分の記事として執筆しています
これからSAP HANAを導入もしくは運用するのでHANAのことをもっと知りたいんだけど、ガイドを読んでもいまいち詳細がわからない。他のデータベースのようにググっても中々、HANAについて詳しい情報がなくて悩んでいる方、いらっしゃらないでしょうか??
(そもそもこのエントリもそういう方向けに書いていますが、、、)
日本語ではSAP HANA入門 Powered by IBM Power Systemsという解説本も2年前に出させていただいていますが、如何せん2年前なので最新機能には対応していません(コアな機能は今でも変わっていないので日本語でサラリと読みたいときには超オススメ)
そんな方にお勧めしたいのが、
FAQノート 2000003 - FAQ: SAP HANA!!
FAQノートって??
一般にSAPのエンジニアにとって、SAPノートとは以下のヘルプにもあるとおり主に既知の不具合を修正するためのパッチもしくは修正が提供されるものです。
SAP ノートには、既知のエラーをSAP システムから除去する方法が指示されています。SAP ノートには、現象の内容説明、エラーの原因、エラーが発生する SAP のリリースおよびサポートパッケージレベルの記述が含まれています。
引用:
https://help.sap.com/doc/saphelp_nw70/7.0.12/ja-JP/28/15ef3957fd0a1be10000000a114084/content.htm?no_...
しかし、SAPノートの中には、サポート技術情報(KBA)と呼ばれるコード修正を含まないヘルプなどの技術文書を補完するために提供されているノートがあります(一応、
サポートポータルではKBAとSAPノートは別物としていますが、番号体系やURLなどは同じなので一般的にはまとめてSAPノートと言っていることが多いです)
SAP HANAではこのKBAと呼ばれるサポート技術情報を提供するノートが「FAQ: XXXX」というタイトルで非常に多く提供されています。2019年12月時点でなんと
87個!!
FAQノートにはSAPヘルプには書いていない細かな仕様や技術情報、関連情報がまとまっており、FAQと名前はついているものの、そのトピックについて詳細を知るためには非常に役たつ情報がまとまっています。お客様からHANAのこの機能の詳細について教えて、とリクエストを受けるとヘルプよりもまず関連するノートを見つけて、その情報を解説して提供することが多いです。
多くのFAQノートの作者は、
前のエントリで紹介したSQL Statement Collectionの作者と同じ人ですので、HANAの世界の神のような人が書いています。
どんなFAQノートがあるの??
HANAについて知りたかったら、まずは
FAQノート 2000003 - FAQ: SAP HANAをご確認ください。汎用的なHANAについての情報がまとまっているだけではなく、様々なトピックについて触れられているFAQノートへのリンクが提供されています。
オススメのFAQノート
先ほど書いたように2019年12月時点で、87個もあるので全て目を通すのは大変です。そのトピックについて確認が必要な際に目を通してもらうの形で良いかと思いますが、ここでは、私がお客様の担当する中でよく紹介したり、確認するお勧めFAQノートをご紹介したいと思います。
In MemoryデータベースであるSAP HANA、一番大事なのはメモリの使い方です。HANAのメモリの使われ方の詳細が非常に細かく解説されています。慢性的なメモリ不足が発生した際にメモリの使用状況の分析の方法や、メモリ使用状況の改善が可能か確認したりするのにとても有効です。
HANAはインメモリのパワーで、瞬間的に多くのリソースを使い、より高速なレスポンスを目指すデータベースです。しかし、S/4HANAのようにOLTPと OLAPが共存するシステム(いわゆるHTAP)では、リソースを多く使いがちなOLAPのクエリがOLTPに影響をださないようにシステム負荷を適切に管理することが非常に重要です。このノートでは、HANAのワークロード管理という機能について詳細に解説がされており、どのように用途の違うユーザ・処理に対してリソースを振り分けるかということが解説されています。
どんなシステムでもこのノートを読んで理解し、適切なクエリのメモリの上限(statement_memory_limit)を設定することを私はお勧めします。
また、HANA2.0 SPS3や4での新機能(STATEMENT TIMEOUTやmax_concurrencyの動的変更、ワークロードマッピングでのワイルドカード)も次々と出ています。だいたい知っているよと言う人も改めて読んでいただけると良いかと思います。
HANAはインメモリかつカラムストアがメインのデータベースあり、他のデータベースと違いIOによるパフォーマンス劣化が少ないのでインデックスの作成などによるSQLチューニングの必要性は少ないです。とはいえ、どんな変なクエリを書いても高速に結果を返せるわけではなく、HANAの特性を理解してSQLをチューニングする必要があります。このFAQノートでは、どんなクエリが高負荷なクエリになりやすく、どういう風に分析するのか解説がされています。HANAのデータベースエンジニアにとってはバイブル的なノートです。
HANAのクエリを処理するエンジンは、用途に応じて複数(Join Engine, OLAP Engine, Calc Engine, ESX, HEX)あります。それぞれのエンジンには得手・不得手があり、Optimizerがどのエンジンが良いか選択し実行計画を作成します。より良いパフォーマンス、もしくはメモリの使用量を減らすため、どのエンジンでどのように処理させるのかとhintを加えて、チューニングとして調整することがあります。このノートではどのようなヒントがあるのか、どうやってヒントを適用するのかといったことが解説されています。
細かいヒントは職人技が求められますが、大きく動作するエンジンを変えるヒント(USE_OLAP_PLAN/NO_USE_OLAP_PLAN, USE_ESX_PLAN/NO_USE_ESX_PLANなど)は試しに使ってみるのはいいのではないかと思います。
パーティショニングは主にスケールアウト環境で使われる技術です。しかし、カラムストアの制約1パーティション/テーブルは20億行までという制約があるため、シングルノードの環境でも大規模なS/4HANAのシステムなどではパーティショニングが必要となるケースがあります。HANAではどのようなパーティショニング技術があり、どのように使えばいいか解説がされています。
なお、S/4HANAのパーティショニングについては、こちらのノートもご参考にしてください。
2289491 - Best Practices for Partitioning of Finance Tables
2259038 - S/4HANA: Partitioning of table MATDOC
まとめ
FAQノートでは、ヘルプドキュメントでは説明しきれない細かな技術情報や実際の使い方などが解説され、HANAの構築・運用する上では欠かせない情報がたくさん紹介されていますので、ぜひ活用してください。
それでは、良いHANAライフを!!