{"id":1069,"date":"2024-04-17T23:53:04","date_gmt":"2024-04-17T20:53:04","guid":{"rendered":"https:\/\/techltx.com\/de\/?p=1069"},"modified":"2024-04-18T18:30:43","modified_gmt":"2024-04-18T15:30:43","slug":"sap-hana-housekeeping-der-technischen-tabellen","status":"publish","type":"post","link":"https:\/\/techltx.com\/de\/sap\/sap-hana-housekeeping-der-technischen-tabellen\/2024\/04\/","title":{"rendered":"SAP HANA Housekeeping der technischen Tabellen"},"content":{"rendered":"\n<p>Beim Housekeeping geht es um die Optimierung der Datenhaltung. Wenn Sie sich Gedanken zur Performance Ihres SAP-Systems machen, dann sollten Sie dabei auch das stetig wachsende Datenvolumen in Betracht ziehen. Je mehr Daten sich in Ihrem System befinden, desto mehr wird die Performance in verschiedenen Bereichen beeinflusst. Deshalb empfehlen wir, regelm\u00e4\u00dfig die Archivierung oder L\u00f6schung bestimmter Daten vorzunehmen. Zur Optimierung des Datenvolumens k\u00f6nnen verschiedene Szenarien betrachtet werden:<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Performance S\/4 HANA<\/h2>\n\n\n\n<p>Das Housekeeping in SAP HANA ist ein wesentlicher Bestandteil der Verwaltung und Optimierung der Datenbank, um eine hohe Performance sicherzustellen. Es bezieht sich auf die verschiedenen Aufgaben, die durchgef\u00fchrt werden, um nicht mehr ben\u00f6tigte Daten zu entfernen oder zu archivieren, die System- und Anwendungslogs zu bereinigen und den Datenbank\u00fcberlauf zu verhindern. Hier sind einige wichtige Aspekte, wie Housekeeping die Performance von SAP HANA verbessern kann:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>Datenarchivierung<\/td><td>Durch das Archivieren alter Daten, die nicht regelm\u00e4\u00dfig abgefragt werden, kann die Datenmenge in der Hauptdatenbank reduziert werden. Dies f\u00fchrt zu schnelleren Abfragezeiten und kann auch die Zeit f\u00fcr Backups sowie die Wiederherstellungsdauer im Falle eines Ausfalls verk\u00fcrzen. Zudem erm\u00f6glicht es effizientere Reorganisationen und Wartungen.<\/td><\/tr><tr><td>L\u00f6schung veralteter Daten<\/td><td>Regelm\u00e4\u00dfiges L\u00f6schen von veralteten oder irrelevanten Daten kann helfen, die Datenbankgr\u00f6\u00dfe zu kontrollieren. Dies reduziert den Speicherbedarf und die Belastung der Datenbank, was wiederum zu einer Verbesserung der Abfrageperformance f\u00fchrt und die Belastung der Hardware reduziert.<\/td><\/tr><tr><td>Bereinigung von Log-Dateien<\/td><td>SAP HANA generiert eine Vielzahl von Log-Dateien, die wertvolle Informationen f\u00fcr Debugging und Monitoring bieten, aber mit der Zeit anwachsen k\u00f6nnen. Die regelm\u00e4\u00dfige Bereinigung dieser Logs verhindert, dass die Dateisysteme voll laufen und die Datenbankperformance beeintr\u00e4chtigen.<\/td><\/tr><tr><td>Partitionierung und Reorganisation<\/td><td>Das regelm\u00e4\u00dfige \u00dcberpr\u00fcfen und Anpassen der Tabellenpartitionierung kann die Datenverteilung optimieren und die Abfrageeffizienz erh\u00f6hen. Ebenso kann die Reorganisation von Indizes und Tabellen helfen, Fragmentierungen zu reduzieren, was zu schnelleren Zugriffszeiten f\u00fchrt.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">HANA Datenbankmigration<\/h2>\n\n\n\n<p>Bei einer Datenbankmigration, zum Beispiel von Oracle zu SAP HANA, spielt das Housekeeping eine wichtige Rolle, um die Effizienz der Migration zu steigern und die Dauer der Offline-Phase zu minimieren. Der Database Migration Option (DMO) Prozess von SAP, der f\u00fcr solche Migrationen oft verwendet wird, profitiert erheblich von vorbereitenden Ma\u00dfnahmen im Bereich des Datenbank-Housekeepings. Hier sind die Hauptgr\u00fcnde und Vorgehensweisen f\u00fcr das Housekeeping im Kontext einer Migration:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>Reduzierung der Datenmenge<\/td><td>Durch das Housekeeping werden unn\u00f6tige oder veraltete Daten entfernt, was direkt die Menge der zu migrierenden Daten reduziert. Weniger Daten bedeuten schnelleres \u00dcbertragen w\u00e4hrend der Migration und eine k\u00fcrzere Dauer der Offline-Phase, die f\u00fcr den finalen Wechsel zur HANA-Datenbank erforderlich ist. <\/td><\/tr><tr><td>Verbesserung der Datenstruktur<\/td><td>Vor der Migration kann das Reorganisieren der Datenbankstrukturen, wie das Neu-Anlegen von Indizes oder das Umstrukturieren von Tabellen und Views, die Performance der neuen HANA-Datenbank optimieren. Solche Ma\u00dfnahmen erleichtern die Migration, da sie dazu beitragen, dass die Daten in einer f\u00fcr HANA optimierten Form vorliegen.<\/td><\/tr><tr><td>Durchf\u00fchrung vor dem finalen Sizing-Report<\/td><td>Es wird empfohlen, das Housekeeping vor dem finalen Lauf des Reports <code>\/sdf\/hdb_sizing<\/code> durchzuf\u00fchren. Dieser Report analysiert die Gr\u00f6\u00dfe der bestehenden Datenbank und sch\u00e4tzt die erforderliche Gr\u00f6\u00dfe und Ressourcen f\u00fcr die SAP HANA-Datenbank. Durch das Housekeeping werden die Daten, die analysiert werden m\u00fcssen, reduziert, was zu einer genaueren und oft geringeren Sch\u00e4tzung der ben\u00f6tigten HANA-Ressourcen f\u00fchrt. vgl. <a href=\"https:\/\/me.sap.com\/notes\/1872170\">https:\/\/me.sap.com\/notes\/1872170<\/a><\/td><\/tr><tr><td><\/td><td><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Kostenoptimierung durch HANA data volume management<\/h2>\n\n\n\n<p>Das Housekeeping der SAP technischen Tabellen ist ein entscheidender Faktor, um die Total Cost of Ownership (TCO) einer SAP HANA Landschaft zu optimieren, insbesondere in einem hochverf\u00fcgbaren Betriebsumfeld. Durch sorgf\u00e4ltiges Management und regelm\u00e4\u00dfige Wartung dieser Tabellen k\u00f6nnen erhebliche Kosten eingespart werden, vor allem durch Reduzierung des ben\u00f6tigten Speicherplatzes und Optimierung der Systemleistung. Hier sind spezifische Wege, wie das Housekeeping die TCO beeinflussen kann:<\/p>\n\n\n\n<figure class=\"wp-block-table is-style-stripes\"><table><tbody><tr><td>Reduzierung des Speicherbedarfs<\/td><td>Technische Tabellen in SAP HANA, die f\u00fcr das Logging, die Zwischenspeicherung von Daten oder als Teil des Betriebsablaufs dienen, k\u00f6nnen im Laufe der Zeit erheblich anwachsen, insbesondere in Systemen, die \u00fcber viele Jahre hinweg aktiv sind. Durch regelm\u00e4\u00dfiges Bereinigen dieser Tabellen l\u00e4sst sich der Speicherbedarf signifikant reduzieren. Beispielsweise k\u00f6nnten alte Log-Daten oder nicht mehr ben\u00f6tigte tempor\u00e4re Daten entfernt werden, was direkt zu einer Reduzierung der ben\u00f6tigten Speicherkapazit\u00e4t f\u00fchrt.<\/td><\/tr><tr><td>Verringerung der Lizenzkosten<\/td><td>SAP HANA Lizenzkosten basieren oft auf dem Volumen der genutzten Daten und der allokierten Ressourcen wie CPU und RAM. Durch das Reduzieren der Datenmenge in den technischen Tabellen k\u00f6nnen die direkten Kosten f\u00fcr die Lizenzierung verringert werden. Weniger Daten zu verwalten bedeutet auch oft, dass weniger leistungsf\u00e4hige (und somit g\u00fcnstigere) Server ausreichend sind.<\/td><\/tr><tr><td>Effizienzsteigerung bei Backups<\/td><td>Backups sind ein kritischer Bestandteil des hochverf\u00fcgbaren Betriebs, aber sie sind auch zeit- und ressourcenintensiv. Durch das Verringern der Datenmenge in technischen Tabellen k\u00f6nnen die f\u00fcr Backups ben\u00f6tigten Zeiten und Speicheranforderungen reduziert werden. Dies f\u00fchrt nicht nur zu direkten Einsparungen bei den Speicherkosten, sondern auch zu einer verbesserten Verf\u00fcgbarkeit w\u00e4hrend Backup-Fenstern.<\/td><\/tr><tr><td>Senkung der Betriebskosten<\/td><td>Mit weniger Daten in den technischen Tabellen sinkt auch der Aufwand f\u00fcr das Datenmanagement und die System\u00fcberwachung. Dies kann zu niedrigeren Betriebskosten f\u00fchren, da weniger Zeit f\u00fcr die Verwaltung des Systems aufgewendet werden muss und eventuell weniger Personal ben\u00f6tigt wird.<\/td><\/tr><tr><td>Verbesserung der Hochverf\u00fcgbarkeit<\/td><td>In einer hochverf\u00fcgbaren Umgebung ist es entscheidend, dass das System schnell wiederherstellbar ist. Gro\u00dfe Mengen unn\u00f6tiger Daten k\u00f6nnen die Wiederherstellungszeit nach einem Ausfall verl\u00e4ngern. Durch das Minimieren dieser Daten kann die Downtime verk\u00fcrzt und somit die Serviceverf\u00fcgbarkeit verbessert werden, was indirekt zu einer Senkung der mit Ausfallzeiten verbundenen Kosten f\u00fchrt.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><a href=\"https:\/\/calendly.com\/baltx\/scheduleanexpert\"><img loading=\"lazy\" decoding=\"async\" width=\"355\" height=\"433\" src=\"https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/schedule-an-expert.png\" alt=\"\" class=\"wp-image-1092\" srcset=\"https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/schedule-an-expert.png 355w, https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/schedule-an-expert-246x300.png 246w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><\/a><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Identifizieren Sie das Potential Ihrer SAP Systemlandschaft<\/h2>\n\n\n\n<p>Das beigef\u00fcgte SQL Script,  welches aus der <a href=\"https:\/\/me.sap.com\/notes\/1969700\">SAP HANA SQL statement collection<\/a> abgeleitet ist,  wurde f\u00fcr die direkte Identifizierung des Housekeeping Potentials parametrisiert.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"315\" src=\"https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view-1024x315.png\" alt=\"Ergebnis der HANA technische Tabellen Analyse.\" class=\"wp-image-1079\" srcset=\"https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view-1024x315.png 1024w, https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view-300x92.png 300w, https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view-768x236.png 768w, https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view-1536x473.png 1536w, https:\/\/techltx.com\/wp-content\/uploads\/2024\/04\/SAP-HANA-technische-Tabellen-view.png 1848w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><\/figure>\n\n\n\n<p><strong>Glossar des SQL Outputs:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>SCHEMA_NAME: Schema name<\/li>\n\n\n\n<li>TABLE_NAME: Table name<\/li>\n\n\n\n<li>COMPONENT: ABAP component<\/li>\n\n\n\n<li>S: Table store (&#8218;R&#8216; for row store, &#8218;C&#8216; for column store)<\/li>\n\n\n\n<li>L: Load state (&#8218;Y&#8216; -> loaded, &#8218;P&#8216; -> partially loaded, &#8218;N&#8216; -> not loaded)<\/li>\n\n\n\n<li>T: &#8218;X&#8216; if table belongs to the class of technical tables described in SAP Note 2388483<\/li>\n\n\n\n<li>U: &#8218;X&#8216; if at least one unique index exists for the table<\/li>\n\n\n\n<li>P: &#8218;X&#8216; if paged attributes are used<\/li>\n\n\n\n<li>COLS: Number of table columns<\/li>\n\n\n\n<li>RECORDS: Number of table records<\/li>\n\n\n\n<li>DISK_GB: Total size on disk (GB, table + indexes + LOBs)<\/li>\n\n\n\n<li>MEM_GB: Total current size in memory (GB, table + indexes + cached LOBs)<\/li>\n\n\n\n<li>PARTS: Number of table partitions (0 if table is not partitioned)<\/li>\n\n\n\n<li>TAB_MEM_GB: Memory size of table (GB)<\/li>\n\n\n\n<li>INDEXES: Number of indexes on the table (\/\/)<\/li>\n\n\n\n<li>IND_MEM_GB: Memory size of indexes (GB)<\/li>\n\n\n\n<li>LOBS: Type and number of LOB columns of the table (&#8218;M&#8216; for in memory LOBs, &#8218;H&#8216; for hybrid LOBs, &#8218;T&#8216; for text LOBs, &#8218;V&#8216; for various column LOB types)<\/li>\n\n\n\n<li>LOB_DISK_GB: Total disk size of all table LOB segments (GB)<\/li>\n\n\n\n<li>LOB_MEM_GB: Total LOB page cache size of all table LOB segments (GB)<\/li>\n\n\n\n<li>SHAR_GB: Shared memory size (GB)<\/li>\n\n\n\n<li>HEAP_GB: Heap memory size (GB)<\/li>\n\n\n\n<li>PERS_GB: Persistent memory size (GB)<\/li>\n\n\n\n<li>PAGE_MEM_GB: Paged attribute memory, e.g. NSE buffer cache content (GB)<\/li>\n\n\n\n<li>PAGE_DISK_GB: Paged attribute size on disk (GB)<\/li>\n\n\n\n<li>POS: Position of table in top list<\/li>\n\n\n\n<li>HOST: Host name (&#8218;various&#8216; in case of partitions on multiple hosts)<\/li>\n\n\n\n<li>MAX_MEM_GB: Total potential maximum size in memory (GB, table + indexes + cached LOBs), LOB caching is considered as static<\/li>\n\n\n\n<li>MEM_PCT: Total current size in memory (% of overall memory size)<\/li>\n\n\n\n<li>CUM_PCT: Cumulated total current size in memory percentage of the largest tables<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>WITH\nBASIS_INFO AS\n( SELECT                                       \/* Modification section *\/\n    '%' SCHEMA_NAME,\n    '%' TABLE_NAME,\n    '%' STORE,                             \/* ROW, COLUMN, % *\/\n    ' ' ONLY_PAGED_TABLES,\n    'X' ONLY_TECHNICAL_TABLES,\n    ' ' ONLY_TABLES_WITH_NSE_RECOMMENDATION,\n    512 MIN_TABLE_DISK_SIZE_MB,\n    'TOTAL_DISK' ORDER_BY,                    \/* CURRENT_MEM, INDEX_MEM, LOB_DISK, LOB_MEM, MAX_MEM, PAGE_MEM, PAGE_DISK, RECORDS, TABLE_MEM, TOTAL_DISK  *\/\n    100 RESULT_ROWS\n  FROM\n    DUMMY\n),\nTECHNICAL_TABLES AS\n( SELECT\n    CASE WHEN LOCATE(SCHEMA_TABLE_NAME, '.') = 0 THEN '%'               ELSE SUBSTR(SCHEMA_TABLE_NAME, 1, LOCATE(SCHEMA_TABLE_NAME, '.') - 1) END SCHEMA_NAME,\n    CASE WHEN LOCATE(SCHEMA_TABLE_NAME, '.') = 0 THEN SCHEMA_TABLE_NAME ELSE SUBSTR(SCHEMA_TABLE_NAME, LOCATE(SCHEMA_TABLE_NAME, '.') + 1) END TABLE_NAME\n  FROM\n  ( SELECT\n      SUBSTR(B.TECHNICAL_TABLES, LOCATE(B.TECHNICAL_TABLES, ',', 1, O.ROWNO) + 1, LOCATE(B.TECHNICAL_TABLES, ',', 1, O.ROWNO + 1) - LOCATE(B.TECHNICAL_TABLES, ',', 1, O.ROWNO) - 1) SCHEMA_TABLE_NAME\n    FROM\n    ( SELECT TOP 1000 ROW_NUMBER() OVER () ROWNO FROM OBJECTS ) O,\n    ( SELECT\n        '%~~OLD,$BPC$HC$%,$BPC$TMP%,\/1CPMB\/%,\/AIF\/ALERT_IDX,\/AIF\/BGRFC_BUFF,\/AIF\/CDATA,\/AIF\/CDATAF,\/AIF\/MMSG_VARS,\/AIF\/PERS_QMSG,\/AIF\/PERS_XML,\/AIF\/QRFC_I_QIN,\/AIF\/QRFC_I_SDAT,' || \n        '\/AIF\/QRFC_I_UNIT,\/AIF\/QRFC_O_QOUT,\/AIF\/QRFC_O_SDAT,\/AIF\/QRFC_O_UNIT,\/AIF\/REP_MSG_CNT,\/AIF\/T_MMSG_IDX,\/AIF\/TRFC_I_DEST,\/AIF\/TRFC_I_SDAT,\/AIF\/TRFC_I_UNIT,' ||\n        '\/AIF\/TRFC_O_DEST,\/AIF\/TRFC_O_SDAT,\/AIF\/TRFC_O_UNIT,\/AIF\/TRFCQDATA,\/AIF\/TRFCQIN,\/AIF\/TRFCQOUT,\/AIF\/TRFCQSTATE,\/AIF\/XRFC_TEMP,' ||\n        '\/BI0\/0%,\/BIC\/000APR%,\/BI_\/A%00,\/BI_\/A%1,\/BI_\/A%2,\/BI_\/A%3,\/BI_\/B%,\/BI_\/E%,\/BI_\/F%,\/BI0\/E0CCM%,\/BI_\/H%,\/BI_\/I%,\/BI_\/J%,\/BI_\/K%,' ||\n        '\/CGS\/T_REPORTXML,\/IWBEP\/SU_ERRLOG,\/IWFND\/L_MET_COL,\/IWFND\/L_MET_DAT,\/IWFND\/SU_ERRLOG,\/IWFND\/SU_STATS,\/IWFND\/SU_TPLOAD,' ||\n        '\/SAPAPO\/LISLOG,\/SAPAPO\/LISMAP,\/SAPTRX\/AOTREF,\/SAPTRX\/APPTALOG,\/SAPTRX\/EH_TASK,\/SCMTMS\/D_MSGREG,\/SCMTMS\/RES_POS,' ||\n        '\/SDF\/CSSIZING,\/SDF\/HDBSIZING,\/SDF\/HDBTABSIZES,\/SDF\/IFR_TRFCQIN,\/SDF\/IFR_TRFCQOU,\/SDF\/INDX,\/SDF\/MON,\/SDF\/RSSIZING,\/SDF\/SMON_CLUST,\/SDF\/SMON_WPINFO,' ||\n        '\/SDF\/ZQLMD,\/SSF\/ATAB,\/SLO\/BCKNEW_CLU,\/SLO\/MYBACKUP_CL,\/SSF\/PTAB,\/TXINTF\/TRACE,\/UIF\/LREP%,\/UIM\/UILOG,\/UISM\/FAT,\/VERTEX\/LOGDM,\/VERTEX\/LOGDM_C,\/VERTEX\/SICXML,0BW:BIA:%,' ||\n        '0BW:CRM:%,ABTREE,APQD,AQLDB,ARDB_STAT0,ARDB_STAT1,ARDB_STAT2,ARFCLOG,ARFCRSTATE,ARFCSDATA,' ||\n        'ARFCSSTATE,BALC,BALDAT,BALHDR,BALHDRP,BALM,BALMP,BAL_INDX,BBPCONT,BBP_TRANSXSTRING,BCST_CAM,BCST_SR,BC_MSG,' ||\n        'BC_BPEM_BL_%,BC_BPEM_EL_%,BC_MSG_AUDIT,BC_MSG_DUP_CHECK,BC_MSG_LOG,BC_MSG_VERSION,' ||\n        'BC_SLD_CHANGELOG,BDCP,BDCP2,BDCPS,BTCEVTHISTORY,BTCJOBEPP,BTCJSTAT,CCMLOG,CCMLOGD,CCMOBJKEYS,CCMOBJLST,CCMSESSION,CCQUEUE,CCQUEUESLICE,CCTABCONTSLDATA,' ||\n        'CDHDR,CDPOS,CDPOS_STR,CDPOS_UID,CE_SCENARIOS_,' ||\n        'CNV_PE_TPM_CLU,CNV_PE_TPM_CLU_T,COIX_DATA40,COUNT_CA_DETAIL,COUNT_CA_ERR_MSG,COUNT_CA_HEADER,COUNT_CA_ITEM,COUNT_CA_PRODUCT,' ||\n        'CRM_ICI_TRACES,CROSS,CS_AUDIT_LOG_,D010TAB,D010INC,DB2DB02%,DB6CONV_,DBMSGORA,DBTABLOG,DBTABPRT,DDLOG,DDPRS,DFKKDOUBTD_RET_W,' ||\n        'DFKKDOUBTD_W,DOKCLU,DMC_INDXCL,DRFD_OBJ_REP_STA,DRFD_SERVOUT_LOG,DRVLOG_HEADER,DRVLOG_ITEM,DRVLOG_FIELDVAL,DRVLOG_TRAIL,' ||\n        'DSVASREPODOCS,DSVASRESULTSATTR,DSVASRESULTSCHK,DSVASRESULTSGEN,DSVASRESULTSSEL,DSVASREPODOCS,' ||\n        'DSVASSESSADMIN,DYNPLOAD,DYNPSOURCE,E2EREP_MAPPING,ECLOG_CALL,ECLOG_DATA,ECLOG_EXEC,ECLOG_EXT,ECLOG_HEAD,ECLOG_RESTAB,' ||\n        'ECLOG_SCNT,ECLOG_SCR,ECLOG_SEL,ECLOG_XDAT,EDI30C,EDI40,EDID4,EDIDC,EDIDOC,EDIDS,' ||\n        'ENHLOG,ESH_EX_CPOINTER,FSBP_CNS_IMAGE,FTPT_LOG_GDS,GRACROLEPRMVL,GRACSODREPDATA,GRACSODREPINDEX,' ||\n        'GRACSODREPSTATUS,GRACUSERPRMVL,GTB_CD_DATA,GTB_CD_DATA2,GTB_CD_KEY,GVD_BGPROCESS,' ||\n        'GVD_BUFF_POOL_ST,GVD_CURR_BLKSRV,GVD_DATABASE,GVD_DATAFILE,GVD_DATAGUARD_ST,GVD_DB_CACHE_ADV,' ||\n        'GVD_ENQUEUE_STAT,GVD_FILESTAT,GVD_INSTANCE,GVD_LATCH,GVD_LATCHCHILDS,GVD_LATCHHOLDER,GVD_LATCHNAME,' ||\n        'GVD_LATCH_MISSES,GVD_LATCH_PARENT,GVD_LIBRARYCACHE,GVD_LOCK,GVD_LOCKED_OBJEC,GVD_LOCK_ACTIVTY,' ||\n        'GVD_LOGFILE,GVD_MANGD_STANBY,GVD_OBJECT_DEPEN,GVD_PARAMETER,GVD_PARAMETER2,GVD_PGASTAT,GVD_PGA_TARGET_A,' ||\n        'GVD_PGA_TARGET_H,GVD_PROCESS,GVD_PX_SESSION,GVD_ROWCACHE,GVD_SEGMENT_STAT,GVD_SEGSTAT,GVD_SERVERLIST,' ||\n        'GVD_SESSION,GVD_SESSION_EVT,GVD_SESSION_WAIT,GVD_SESSTAT,GVD_SESS_IO,GVD_SGA,GVD_SGACURRRESIZ,' ||\n        'GVD_SGADYNCOMP,GVD_SGADYNFREE,GVD_SGARESIZEOPS,GVD_SGASTAT,GVD_SHAR_P_ADV,GVD_SPPARAMETER,GVD_SQL,' ||\n        'GVD_SQLAREA,GVD_SQLTEXT,GVD_SQL_WA_ACTIV,GVD_SQL_WA_HISTO,GVD_SQL_WORKAREA,GVD_SYSSTAT,GVD_SYSTEM_EVENT,' ||\n        'GVD_TEMPFILE,GVD_UNDOSTAT,GVD_WAITSTAT,GVD_WPTOTALINFO,IBIN,IBINVALUES,IDOCREL,INDX,' ||\n        'INIFILE_CONTENT_HISTORY_,JBDCPHDR2,JBDCPPOS2,JOB_LOG,LMDB_P_CHANGELOG,MATCH_TRACING_,MCT_STORAGE,MCT_STORAGE_BCK,' ||\n        'MDMFDBEVENT,MDMFDBID,MDMFDBPR,MERGED_TRACES_FOR_COCKPIT,NRIVSHADOW,OBJECT_HISTORY,ODQDATA,ODQDATA_C,ODQDATA_F,ODTD_ER, ODTD_ER_ATT_BIN,ORA_SNAPSHOT,ORA_SQLC_DATA,ORA_SQLC_HEAD,' ||\n        'PERF_%_PERF_ANALYSIS%,P_EXPLAIN_CALL_PLANS_,POC_D_EVTQ,POC_D_EVTQ_PREBO,POC_D_EVTQ_CNTXT,POWL_RESULT,' ||\n        'PPARFC,QRFC_I_EXE_STATE,QRFC_I_QIN,QRFC_I_QIN_LOCK,QRFC_I_SDATA,QRFC_I_QIN_TOP,QRFC_I_UNIT,QRFC_I_UNIT_LOCK,' ||\n        'QRFCLOG,QRFCTRACE,REMOTE_SOURCE_OBJECTS_,REMOTE_SOURCE_OBJECT_DESCRIPTIONS_,REPOLOAD,' ||\n        'REPOSRC,RSAU_BUF_DATA,RSAU_LOG,RSBATCHCTRL,RSBATCHCTRL_PAR,RSBATCHDATA,RSBATCHHEADER,RSBATCHPROT,' ||\n        'RSBATCHSTACK,RSBERRORLOG,RSBKDATA,RSBKDATAINFO,RSBKDATAPAKID,RSBKDATAPAKSEL,RSBKSELECT,RSBMLOGPAR,' ||\n        'RSBMLOGPAR_DTP,RSBMNODES,RSBMONMESS,RSBMONMESS_DTP,RSBMREQ_DTP,RSBTERRORLOG,RSBTERRORCHANGED,RSCRTDONE,RSDDSTATAGGR,RSDDSTATAGGRDEF,' ||\n        'RSDDSTATCOND,RSDDSTATDELE,RSDDSTATDM,RSDDSTATDTP,RSDDSTATEVDATA,RSDDSTATHEADER,RSDDSTATINFO,RSDDSTATLOGGING,' ||\n        'RSDELDONE,RSDRDLOGHEADER,RSDRDLOGPOSITION,RSECHIE_CL,RSECLOG,RSECSESSION_CL,' ||\n        'RSECTXT_CL,RSECUSERAUTH_CL,RSECVAL_CL,RSERRORHEAD,RSERRORLOG,' ||\n        'RSHIEDONE,RSICPROT,RSIXWWW,RSLDTDONE,RSMONFACT,RSMONICTAB,RSMONIPTAB,RSMONMESS,RSMONRQTAB,RSODSACTUPDTYPE,' ||\n        'RSOTLOGOHISTORY,RSPCINSTANCE,RSPCINSTANCET,RSPCPROCESSLOG,' ||\n        'RSPMADMIN,RSPMDATAPID,RSPMDATATARGET,RSPMDTASELECTION,RSPMFILTERCMD,' ||\n        'RSPMHKDATAPID,RSPMHKLOG,RSPMHKPROCESS,RSPMHKREQUEST,RSPMHKREQUESTPRP,RSPMHKREQSTATHST,RSPMHKSELECTION,RSPMHKXREF,' ||\n        'RSPMLOG,RSPMPROCESS,RSPMPROCESSDTAV,RSPMPROCESSTYPE,' ||\n        'RSPMPROCESSTYPET,RSPMREQSTATHIST,RSPMREQUEST,RSPMREQUESTPROP,RSPMSTATICEVENT,RSPMSTORAGESTAT,RSPMTRACE,RSPMVARIANT,RSPMXREF,' ||\n        'RSR_CACHE_DATA_B,RSR_CACHE_DATA_C,RSR_CACHE_DBS_BL,RSR_CACHE_FFB,RSR_CACHE_QUERY,RSR_CACHE_STATS,' ||\n        'RSR_CACHE_VARSHB,RSSELDONE,RSSTATMANREQMAP,RSSTATMANREQMDEL,RSTCPDONE,RSTT_CALLSTACK,RSUICDONE,RSWR_DATA,' ||\n        'RSZCALC,RSZCEL,RSZCOMPIC,RSZELTATTR,RSZELTDIR,RSZELTPRIO,RSZELTPROP,RSZELTTXT,RSZELTXREF,RSZGLOBV,RSZRANGE,' ||\n        'RSZWBOOKMARK,RSZWITEM,RSZWOBJ,RSZWVIEW,SALRT,SALRTCNT,sap.bc.ina.fileloader.db::INA_FILELOADER.LOG,SACONT01,SASACONT1,' ||\n        'SBOI_DTRC_DETAIL,SBOI_DTRC_HEADER,SBCMCONT1,SCMON_DATA,SCR_ABAP_AST,SCR_ABAP_SCAN,SCR_ABAP_SYMB,SCR_ABAP_SYMB_SL,' ||\n        'SDBAD,SDBAH,SE16N_CD_DATA,SE16N_CD_KEY,SEC_CONTEXT_BLKD,SICFRECORDER,SMD_HASH_TABLE,SMO8FTCFG,' ||\n        'SMO8FTSTP,SMO8_DLIST,SMO8_TMDAT,SMO8_TMSG,SMW0REL,SMW3_BDOC,SMW3_BDOC1,SMW3_BDOC2,SMW3_BDOC4,SMW3_BDOC5,' ||\n        'SMW3_BDOC6,SMW3_BDOC7,SMW3_BDOCQ,SMWT_TRC,SNAP,SOC3,SOC3N,SOFFCONT1,SOOD,SOOS,SPAF_ERR_LOG_MSG,SPAF_ERR_MSGSQLMD,SRRELROLES,SRRELROLES,' ||\n        'SRTM_SUB,SRT_CDTC,SRT_MMASTER,SRT_MONILOG_DATA,SRT_MVERSIONS,SRT_RTC_DATA,SRT_RTC_DATA_RT,SRT_RTC_DT_RT,SRT_SEQ_HDR_STAT,' ||\n        'SRT_SEQ_REORG,SRT_UTIL_ERRLOG,SRT_UTIL_TRCFUNC,SRT_UTIL_TRCPERF,SRT_UTIL_TRCPLOA,SSCOOKIE,STATISTICS_ALERTS,' ||\n        'STATISTICS_ALERTS_BASE,SUAUTHVALTRC,SWELOG,SWELTS,SWEQCONT,SWEQUEUE,SWFGPROLEINST,SWFRCNTXML,' ||\n        'SWFREVTCNT,SWFREVTLOG,SWFREVTPOQ,SWFRXICNT,SWFRXIHDR,SWFRXIPRC,SWF_TRC_CONT,SWNCM%,SWN_NOTIF,SWN_NOTIFTSTMP,SWN_SENDLOG,SWPNODE,SWPNODELOG,' ||\n        'SWPSTEPLOG,SWP_HEADER,SWP_NODEWI,SWWCNTP0,SWWCNTPADD,SWWEI,SWWLOGHIST,SWWLOGPARA,SWWUSERWI,SWWWIDEADL,' ||\n        'SWWWIHEAD,SWWWIRET,SWW_CONT,SWW_CONTOB,SWW_WI2OBJ,SWW_WIREGISTRY,SWZAI,SWZAIENTRY,SWZAIRET,SXMSCLUP,SXMSCLUP2,SXMSCLUR,SXMSCLUR2,' || \n        'SXMSPFRAWD,SXMSPFRAWH,SXMSPHIST,SXMSPHIST2,SXMSPEMAST,SXMSPEMAS2,SXMSPMAST,SXMSPMAST2,' ||\n        'SXMSPVERS,SXMSPVERS2,SXMSPERROR,SXMSPERRO2,T811E,T811ED,T811ED2,TAAN_DATA,' ||\n        'TAAN_FLDS,TAAN_HEAD,TABLE_GROUPS_,TASK_EXECUTIONS,TBTCO,TBTCJOBLOG%,TBTCP,TBTCS,TBTC_TASK,TEAMI_LOG_DATA,TEAMI_LOG_MSG,TPRI_PAR,' ||\n        'TRANS_TOKEN_HISTORY,TRFCQDATA,TRFCQIN,TRFCQOUT,TRFCQSTATE,TRFC_I_DEST,' ||\n        'TRFC_I_ERR_STATE,TRFC_I_EXE_STATE,TRFC_I_SDATA,TRFC_I_UNIT,TRFC_I_UNIT_LOCK,\/TRP\/RES_TRKLOG,TSPEVDEV,TSPEVJOB,TST01,' ||\n        'TST03,TXMILOGRAW,UASE16N_CD_DATA,UASE16N_CD_KEY,UJ0_STAT_DTL,UJ0_STAT_HDR,UJF_DOC,UJF_DOC_CLUSTER,UPC_STATISTIC,UPC_STATISTIC2,' ||\n        'UPC_STATISTIC3,USOB_AUTHVALTRC,VBDATA,VBERROR,VBHDR,VBMOD,VDCHGPTR,WBCROSSGT,WBCROSSI,WRH$_ACTIVE_SESSION_HISTORY,' ||\n        'WRI$_OPTSTAT_HISTGRM_HISTORY,WRI$_OPTSTAT_HISTHEAD_HISTORY,WRI$_OPTSTAT_IND_HISTORY,WRI$_OPTSTAT_TAB_HISTORY,WWWDATA,' ||\n        'XI_AF_MSG,XI_AF_MSG_AUDIT,ZARIX%,ZBI_Z%,_SYS_STATISTICS.GLOBAL%,_SYS_STATISTICS.HOST%,_SYS_STATISTICS.TEL%,' TECHNICAL_TABLES\n     FROM\n       DUMMY\n    ) B\n  )\n  WHERE\n    SCHEMA_TABLE_NAME != ''\n),\nTABLES_HELPER AS\n( SELECT\n    T.SCHEMA_NAME,\n    T.TABLE_NAME,\n    DF.PS_POSID COMPONENT,\n    T.HOST,\n    T.STORE,\n    T.RECORD_COUNT RECORDS,\n    T.TABLE_MEM_MB,\n    T.LOADED,\n    T.HEAP_MEM_MB,\n    T.PERS_MEM_MB,\n    T.MAX_MEM_MB,\n    T.PAGE_MEM_MB,\n    IFNULL(CPS.PAGE_DISK_MB, 0) PAGE_DISK_MB,\n    TP.TOTAL_DISK_MB,\n    TC.NUM_COLUMNS,\n    TC.PAGED_COLUMNS,\n    IFNULL( ( SELECT MAX(MAP(LOAD_UNIT, 'PAGE', 1, 0)) PAGED_PARTITIONS FROM M_TABLE_PARTITIONS TP WHERE TP.SCHEMA_NAME = T.SCHEMA_NAME AND TP.TABLE_NAME = T.TABLE_NAME ), 0 ) PAGED_PARTITIONS,\n    GREATEST(0, IFNULL(I.UNIQUE_INDEXES, 0)) UNIQUE_INDEXES,\n    GREATEST(0, IFNULL(I.INDEXES, 0)) INDEXES,\n    GREATEST(0, IFNULL(IM.CONCATS, 0)) CONCATS,\n    GREATEST(0, IFNULL(IM.IMPLICIT_INDEXES, 0)) IMPLICIT_INDEXES,\n    GREATEST(0, IFNULL(IC.MULTI_COLUMN_INDEXES, 0)) MULTI_COLUMN_INDEXES,\n    ( SELECT COUNT(*) FROM FULLTEXT_INDEXES F WHERE F.SCHEMA_NAME = T.SCHEMA_NAME AND F.TABLE_NAME = T.TABLE_NAME ) FULLTEXT_INDEXES,\n    IFNULL(IM.INDEX_MEM_MB, 0) INDEX_MEM_MB,\n    IFNULL(IM.RS_INDEX_MEM_MB, 0) RS_INDEX_MEM_MB,\n    IFNULL(L.LOB_INFO, '') LOB_INFO,\n    IFNULL(LS.LOB_DISK_MB, 0) LOB_DISK_MB,\n    IFNULL(LS.LOB_MEM_MB, 0) LOB_MEM_MB,\n    IFNULL(P.PARTITIONS, 1) PARTITIONS,\n    IFNULL(TT.TECHNICAL_TABLE, '') TECHNICAL_TABLE\n  FROM\n    BASIS_INFO BI INNER JOIN\n    ( SELECT\n        'COLUMN' STORE,\n        SCHEMA_NAME, \n        TABLE_NAME, \n        MAP(MIN(HOST), MAX(HOST), MIN(HOST), 'various') HOST, \n        MAP(MAX(LOADED), 'NO', 'N', 'FULL', 'Y', 'PARTIALLY', 'P') LOADED,\n        SUM(RECORD_COUNT) RECORD_COUNT,\n        SUM(MEMORY_SIZE_IN_TOTAL + PERSISTENT_MEMORY_SIZE_IN_TOTAL) \/ 1024 \/ 1024 TABLE_MEM_MB,\n        SUM(MEMORY_SIZE_IN_TOTAL) \/ 1024 \/ 1024 HEAP_MEM_MB,\n        SUM(PERSISTENT_MEMORY_SIZE_IN_TOTAL) \/ 1024 \/ 1024 PERS_MEM_MB,\n        SUM(ESTIMATED_MAX_MEMORY_SIZE_IN_TOTAL) \/ 1024 \/ 1024 MAX_MEM_MB,\n        SUM(MEMORY_SIZE_IN_PAGE_LOADABLE_MAIN) \/ 1024 \/ 1024 PAGE_MEM_MB\n      FROM\n        M_CS_TABLES\n      GROUP BY \n        SCHEMA_NAME, \n        TABLE_NAME\n      HAVING\n        SUM(RECORD_COUNT) >= 100\n      UNION\n      ( SELECT\n          'ROW' STORE,\n          SCHEMA_NAME, \n          TABLE_NAME, \n          MAP(MIN(HOST), MAX(HOST), MIN(HOST), 'various') HOST, \n          'Y' LOADED,\n          SUM(RECORD_COUNT) RECORD_COUNT,\n          SUM(USED_FIXED_PART_SIZE + USED_VARIABLE_PART_SIZE) \/ 1024 \/ 1024 TABLE_MEM_MB,\n          0 HEAP_MEM_MB,\n          0 PERS_MEM_MB,\n          0 MAX_MEM_MB,\n          0 PAGE_MEM_MB\n        FROM\n          M_RS_TABLES \n        GROUP BY \n          SCHEMA_NAME, \n          TABLE_NAME\n        HAVING\n          SUM(USED_FIXED_PART_SIZE + USED_VARIABLE_PART_SIZE) >= 1024 * 1024\n      )\n    ) T ON\n      T.SCHEMA_NAME LIKE BI.SCHEMA_NAME AND\n      T.TABLE_NAME LIKE BI.TABLE_NAME AND\n      T.STORE LIKE BI.STORE INNER JOIN\n    ( SELECT\n        TC.SCHEMA_NAME,\n        TC.TABLE_NAME,\n        COUNT(*) NUM_COLUMNS,\n        SUM(MAP(T.LOAD_UNIT, 'PAGE', 1, MAP(TC.LOAD_UNIT, 'PAGE', 1, 0))) PAGED_COLUMNS\n      FROM\n        TABLES T,\n        TABLE_COLUMNS TC\n      WHERE\n        T.SCHEMA_NAME = TC.SCHEMA_NAME AND\n        T.TABLE_NAME = TC.TABLE_NAME\n      GROUP BY\n        TC.SCHEMA_NAME,\n        TC.TABLE_NAME\n    ) TC ON\n    TC.SCHEMA_NAME = T.SCHEMA_NAME AND\n    TC.TABLE_NAME = T.TABLE_NAME INNER JOIN\n    ( SELECT\n        TP.SCHEMA_NAME,\n        TP.TABLE_NAME,\n        SUM(TP.DISK_SIZE) \/ 1024 \/ 1024 TOTAL_DISK_MB\n      FROM\n        BASIS_INFO BI,\n        M_TABLE_PERSISTENCE_STATISTICS TP\n      WHERE\n        ( BI.MIN_TABLE_DISK_SIZE_MB = -1 OR TP.DISK_SIZE \/ 1024 \/ 1024 >= BI.MIN_TABLE_DISK_SIZE_MB )\n      GROUP BY\n        TP.SCHEMA_NAME,\n        TP.TABLE_NAME\n      HAVING\n        SUM(TP.DISK_SIZE) >= 1024 * 1024\n    ) TP ON\n      TP.SCHEMA_NAME = T.SCHEMA_NAME AND\n      TP.TABLE_NAME = T.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        SUM(MAIN_PHYSICAL_SIZE_IN_PAGE_LOADABLE) \/ 1024 \/ 1024 PAGE_DISK_MB\n      FROM\n        M_CS_COLUMNS_PERSISTENCE\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) CPS ON\n      CPS.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      CPS.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        IFNULL(SUM\n        ( CASE INTERNAL_ATTRIBUTE_TYPE\n            WHEN 'TREX_UDIV'         THEN 0                                                                    \/* technical necessity, completely treated as \"table\" *\/\n            WHEN 'ROWID'             THEN 0                                                                    \/* technical necessity, completely treated as \"table\" *\/\n            WHEN 'VALID_FROM'        THEN 0                                                                    \/* technical necessity, completely treated as \"table\" *\/\n            WHEN 'VALID_TO'          THEN 0                                                                    \/* technical necessity, completely treated as \"table\" *\/\n            WHEN 'TEXT'              THEN MEMORY_SIZE_IN_TOTAL + PERSISTENT_MEMORY_SIZE_IN_TOTAL               \/* both concat attribute and index on it treated as \"index\" *\/\n            WHEN 'TREX_EXTERNAL_KEY' THEN MEMORY_SIZE_IN_TOTAL + PERSISTENT_MEMORY_SIZE_IN_TOTAL               \/* both concat attribute and index on it treated as \"index\" *\/\n            WHEN 'UNKNOWN'           THEN MEMORY_SIZE_IN_TOTAL + PERSISTENT_MEMORY_SIZE_IN_TOTAL               \/* both concat attribute and index on it treated as \"index\" *\/\n            WHEN 'CONCAT_ATTRIBUTE'  THEN MEMORY_SIZE_IN_TOTAL + PERSISTENT_MEMORY_SIZE_IN_TOTAL               \/* both concat attribute and index on it treated as \"index\" *\/\n            ELSE MAIN_MEMORY_SIZE_IN_INDEX + MAIN_PERSISTENT_MEMORY_SIZE_IN_INDEX + DELTA_MEMORY_SIZE_IN_INDEX \/* index structures on single columns treated as \"index\" *\/\n          END\n        ), 0) \/ 1024 \/ 1024 INDEX_MEM_MB,\n        SUM(CASE WHEN PART_ID <= 1 AND INTERNAL_ATTRIBUTE_TYPE IN ( 'CONCAT_ATTRIBUTE', 'TREX_EXTERNAL_KEY') THEN 1 ELSE 0 END) CONCATS,\n        COUNT(DISTINCT(CASE WHEN INDEX_TYPE != 'NONE' AND INTERNAL_ATTRIBUTE_TYPE IS NULL THEN COLUMN_NAME ELSE NULL END)) IMPLICIT_INDEXES,\n        0 RS_INDEX_MEM_MB\n      FROM\n        M_CS_ALL_COLUMNS\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n      UNION ALL\n      SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        SUM(INDEX_SIZE) \/ 1024 \/ 1024 INDEX_MEM_MB,\n        0 CONCATS,\n        0 IMPLICIT_INDEXES,\n        SUM(INDEX_SIZE) \/ 1024 \/ 1024 RS_INDEX_MEM_MB\n      FROM\n        M_RS_INDEXES\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) IM ON\n      IM.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      IM.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        CASE WHEN MIN(CS_DATA_TYPE_NAME) = MAX(CS_DATA_TYPE_NAME) THEN IFNULL(MAX(MAP(CS_DATA_TYPE_NAME, 'ST_MEMORY_LOB', 'M', 'LOB', 'H', \n          'ST_DISK_LOB', 'D', 'TEXT', 'T', 'U')), '') ELSE 'V' END || COUNT(*) LOB_INFO\n      FROM \n        TABLE_COLUMNS\n      WHERE \n        DATA_TYPE_NAME IN ( 'BLOB', 'CLOB', 'NCLOB', 'TEXT' )\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) L ON\n      L.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      L.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        SUM(CASE WHEN INDEX_TYPE LIKE '%UNIQUE%' OR CONSTRAINT LIKE '%UNIQUE%' OR CONSTRAINT = 'PRIMARY KEY' THEN 1 ELSE 0 END) UNIQUE_INDEXES,\n        COUNT(*) INDEXES\n      FROM\n        INDEXES\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) I ON\n      I.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      I.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        COUNT(*) MULTI_COLUMN_INDEXES\n      FROM\n        INDEX_COLUMNS\n      WHERE\n        POSITION = 2\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) IC ON\n      IC.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      IC.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        COUNT(*) PARTITIONS\n      FROM\n        M_CS_PARTITIONS\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) P ON\n      P.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      P.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        SUM(DISK_SIZE) \/ 1024 \/ 1024 LOB_DISK_MB,\n        SUM(MEMORY_SIZE) \/ 1024 \/ 1024 LOB_MEM_MB\n      FROM\n        M_TABLE_LOB_STATISTICS\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) LS ON\n      LS.SCHEMA_NAME = TP.SCHEMA_NAME AND\n      LS.TABLE_NAME = TP.TABLE_NAME LEFT OUTER JOIN\n    ( SELECT\n        SCHEMA_NAME,\n        TABLE_NAME,\n        'X' TECHNICAL_TABLE\n      FROM\n        TECHNICAL_TABLES\n      GROUP BY\n        SCHEMA_NAME,\n        TABLE_NAME\n    ) TT ON\n      TP.SCHEMA_NAME LIKE TT.SCHEMA_NAME AND\n      TP.TABLE_NAME LIKE TT.TABLE_NAME LEFT OUTER JOIN\n    TADIR TA ON\n      TA.PGMID = 'R3TR' AND\n      TA.OBJECT IN ('TABL', 'SQLT') AND\n      TA.OBJ_NAME = T.TABLE_NAME LEFT OUTER JOIN\n    TDEVC TD ON\n      TD.DEVCLASS = TA.DEVCLASS LEFT OUTER JOIN\n    DF14L DF ON\n      TD.COMPONENT = DF.FCTR_ID\n)\nSELECT\n  SCHEMA_NAME,\n  TABLE_NAME,\n  COMPONENT,\n  S,                                        \/* 'C' --> column store, 'R' --> row store *\/\n  LOADED L,                                 \/* 'Y' --> fully loaded, 'P' --> partially loaded, 'N' --> not loaded *\/\n  TECHNICAL_TABLE T,                        \/* 'X' if table belongs to list of technical tables (SAP Note 2388483) *\/\n  U,                                        \/* 'X' if unique index exists for table *\/\n  MAP(PAGED, 0, ' ', 'X') P,        \/* 'X' if paged attributes exist (SAP Note 1871386) *\/\n  LPAD(NUM_COLUMNS, 4) COLS,\n  LPAD(RECORDS, 12) RECORDS,\n  LPAD(TO_DECIMAL(TOTAL_DISK_MB \/ 1024, 10, 2), 7) DISK_GB,\n  LPAD(TO_DECIMAL(TOTAL_MEM_MB \/ 1024, 10, 2), 7) MEM_GB,\n  LPAD(PARTITIONS, 5) \"PARTS\",\n  LPAD(TO_DECIMAL(TABLE_MEM_MB \/ 1024, 10, 2), 10) TAB_MEM_GB,\n  INDEXES,\n  LPAD(TO_DECIMAL(INDEX_MEM_MB \/ 1024, 10, 2), 10) IND_MEM_GB,\n  LPAD(LOB_INFO, 4) LOBS,\n  LPAD(TO_DECIMAL(LOB_DISK_MB \/ 1024, 10, 2), 11) LOB_DISK_GB,\n  LPAD(TO_DECIMAL(LOB_MEM_MB \/ 1024, 10, 2), 10) LOB_MEM_GB,\n  LPAD(TO_DECIMAL(SHARED_MEM_MB \/ 1024, 10, 2), 7) SHAR_GB,\n  LPAD(TO_DECIMAL(HEAP_MEM_MB \/ 1024, 10, 2), 7) HEAP_GB,\n  LPAD(TO_DECIMAL(PERS_MEM_MB \/ 1024, 10, 2), 7) PERS_GB,\n  LPAD(TO_DECIMAL(PAGE_MEM_MB \/ 1024, 10, 2), 11) PAGE_MEM_GB,\n  LPAD(TO_DECIMAL(PAGE_DISK_MB \/ 1024, 10, 2), 12) PAGE_DISK_GB,\n  LPAD(ROW_NUM, 3) POS,\n  HOST,\n  LPAD(TO_DECIMAL(MAX_TOTAL_MEM_MB \/ 1024, 10, 2), 10) MAX_MEM_GB,\n  LPAD(TO_DECIMAL(MEM_PCT, 9, 2), 7) MEM_PCT,\n  LPAD(TO_DECIMAL(SUM(MEM_PCT) OVER (ORDER BY ROW_NUM), 5, 2), 7) CUM_PCT\nFROM\n( SELECT\n    T.SCHEMA_NAME,\n    T.TABLE_NAME,\n    T.COMPONENT,\n    T.HOST,\n    T.TECHNICAL_TABLE,\n    CASE WHEN UNIQUE_INDEXES = 0 THEN ' ' ELSE 'X' END U,\n    MAP(T.STORE, 'COLUMN', 'C', 'ROW', 'R') S,\n    MAP(T.STORE, 'COLUMN', 0, T.TABLE_MEM_MB) SHARED_MEM_MB,\n    MAP(T.STORE, 'COLUMN', T.HEAP_MEM_MB, T.RS_INDEX_MEM_MB) + T.LOB_MEM_MB HEAP_MEM_MB,\n    T.PERS_MEM_MB,\n    T.NUM_COLUMNS,\n    MAP(T.PAGED_COLUMNS, 0, T.PAGED_PARTITIONS, T.PAGED_COLUMNS) PAGED,\n    T.RECORDS,\n    T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB + T.LOB_MEM_MB TOTAL_MEM_MB,\n    IFNULL(T.MAX_MEM_MB, T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB) + T.LOB_MEM_MB MAX_TOTAL_MEM_MB,\n    T.TABLE_MEM_MB - T.INDEX_MEM_MB + T.RS_INDEX_MEM_MB TABLE_MEM_MB,\n    T.PAGE_MEM_MB,\n    T.PAGE_DISK_MB,\n    T.LOADED,\n    T.TOTAL_DISK_MB,\n    CASE \n      WHEN SUM(T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB) OVER () * 100 = 0 THEN 0 \n      ELSE (T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB) \/ SUM(T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB) OVER () * 100\n    END MEM_PCT,\n    T.PARTITIONS,\n    T.INDEXES || '\/' || MAP(T.STORE, 'ROW', 0, GREATEST(0, T.CONCATS - T.MULTI_COLUMN_INDEXES)) || '\/' || MAP(T.STORE, 'ROW', 0, T.IMPLICIT_INDEXES - (T.INDEXES - T.MULTI_COLUMN_INDEXES - T.FULLTEXT_INDEXES)) INDEXES,\n    T.INDEX_MEM_MB,\n    T.LOB_INFO,\n    T.LOB_MEM_MB,\n    T.LOB_DISK_MB,\n    ROW_NUMBER () OVER ( ORDER BY MAP ( BI.ORDER_BY,\n      'TOTAL_DISK',  T.TOTAL_DISK_MB, \n      'CURRENT_MEM', T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB + T.LOB_MEM_MB, \n      'MAX_MEM',     IFNULL(T.MAX_MEM_MB, T.TABLE_MEM_MB + T.RS_INDEX_MEM_MB) + T.LOB_MEM_MB,\n      'TABLE_MEM',   T.TABLE_MEM_MB - T.INDEX_MEM_MB + T.RS_INDEX_MEM_MB, \n      'INDEX_MEM',   T.INDEX_MEM_MB,\n      'LOB_DISK',    T.LOB_DISK_MB,\n      'LOB_MEM',     T.LOB_MEM_MB,\n      'PAGE_MEM',    T.PAGE_MEM_MB,\n      'PAGE_DISK',   T.PAGE_DISK_MB,\n      'RECORDS',     T.RECORDS ) \n      DESC, T.SCHEMA_NAME, T.TABLE_NAME ) ROW_NUM,\n    BI.RESULT_ROWS,\n    BI.ORDER_BY\n  FROM\n    BASIS_INFO BI,\n    TABLES_HELPER T\n  WHERE\n    ( BI.ONLY_TECHNICAL_TABLES = ' ' OR T.TECHNICAL_TABLE = 'X' ) AND\n    ( BI.ONLY_TABLES_WITH_NSE_RECOMMENDATION = ' ' OR T.TABLE_NAME IN ( 'BALDAT', 'CDPOS', 'EDID4' ) ) AND\n    ( BI.ONLY_PAGED_TABLES = ' ' OR MAP(T.PAGED_COLUMNS, 0, T.PAGED_PARTITIONS, T.PAGED_COLUMNS) > 0 )\n)\nWHERE\n  ( RESULT_ROWS = -1 OR ROW_NUM <= RESULT_ROWS )\nORDER BY\n  ROW_NUM\nWITH HINT ( IGNORE_PLAN_CACHE );<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>Durch gezieltes Housekeeping der technischen Tabellen in SAP HANA kann eine signifikante Reduzierung der TCO erreicht werden. Dies ist besonders in einem hochverf\u00fcgbaren Umfeld relevant, wo jede Sekunde Ausfallzeit und jedes Gigabyte an Speicherplatz hohe Kosten verursachen k\u00f6nnen. Systematische Bereinigungen und die Optimierung der Datenhaltung sind daher nicht nur technische, sondern vor allem wirtschaftliche Ma\u00dfnahmen, die die Effizienz und Wirtschaftlichkeit der SAP HANA Landschaft ma\u00dfgeblich verbessern k\u00f6nnen.<\/p>\n<p>Das beigef\u00fcgte SQL Skript zeigt Ihnen das Potential auf und weist die jeweiligen technischen HANA Tabellen aus. Ausgehend von dem Ergebnis kann eine individuelle Housekeeping-Strategie erarbeitet werden.<\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"content-type":"","_uag_custom_page_level_css":"","site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[86,5],"tags":[80,101,102,27,7],"class_list":["post-1069","post","type-post","status-publish","format-standard","hentry","category-hana","category-sap","tag-hana","tag-housekeeping","tag-technical-tables","tag-abap","tag-sap"],"uagb_featured_image_src":{"full":false,"thumbnail":false,"medium":false,"medium_large":false,"large":false,"1536x1536":false,"2048x2048":false},"uagb_author_info":{"display_name":"BALTX","author_link":"https:\/\/techltx.com\/de\/author\/baltx-com\/"},"uagb_comment_info":3,"uagb_excerpt":"Durch gezieltes Housekeeping der technischen Tabellen in SAP HANA kann eine signifikante Reduzierung der TCO erreicht werden. Dies ist besonders in einem hochverf\u00fcgbaren Umfeld relevant, wo jede Sekunde Ausfallzeit und jedes Gigabyte an Speicherplatz hohe Kosten verursachen k\u00f6nnen. Systematische Bereinigungen und die Optimierung der Datenhaltung sind daher nicht nur technische, sondern vor allem wirtschaftliche Ma\u00dfnahmen,&hellip;","_links":{"self":[{"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/posts\/1069","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/comments?post=1069"}],"version-history":[{"count":12,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/posts\/1069\/revisions"}],"predecessor-version":[{"id":1094,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/posts\/1069\/revisions\/1094"}],"wp:attachment":[{"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/media?parent=1069"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/categories?post=1069"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/techltx.com\/de\/wp-json\/wp\/v2\/tags?post=1069"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}