<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic OnCommand Performance Manager 1.1 – Database Access and Design in Active IQ Unified Manager Discussions</title>
    <link>https://community.netapp.com/t5/Active-IQ-Unified-Manager-Discussions/OnCommand-Performance-Manager-1-1-Database-Access-and-Design/m-p/99886#M17609</link>
    <description>&lt;P&gt;&lt;FONT size="2"&gt;OnCommand Performance Manager (OPM) 1.1 features user access to the underlying data collected allowing integration into third party tools and creation of custom data presentations.&amp;nbsp; The database details have not yet been published in the Release Candidate documentation to date, but this post covers what I’ve worked out so far.&amp;nbsp; Everything is subject to change of course before the final release (&lt;EM&gt;please see disclaimer at the end of this post&lt;/EM&gt;). &amp;nbsp;As there have been some other posts interested in the topic, I wanted to share what I’ve learned.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Database Access Setup&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Both OPM 1.1 and the companion OnCommand Unified Manager (OCUM) 6.2 release candidates support a new user role “Database User”.&amp;nbsp; This user is configured in the same manner as any other user through the GUI under the Administration / Manage User menu pulldowns.&amp;nbsp; A limitation on the Database User role is that the defined user must be a locally authenticated user.&amp;nbsp; You cannot use any remote authentication such as LDAP or Active Directory for this role at the current time.&amp;nbsp; So you’ll have to add one more line item to the password rotation element of your normal security maintenance plan when you add database users to either OCUM or OPM.&amp;nbsp; Additionally, OCUM and OPM do not share local user definitions – if you hook multiple OPMs under a single OCUM, you need to add and maintain database users separately to each instance.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Accessing the Database&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;OPM uses the MySQL database engine.&amp;nbsp; You can use any driver/database connection mechanism to access the DB that supports MySQL.&amp;nbsp; For example, you can install the ODBC drivers for MySQL on a Windows platform and thus make the database accessible to any application that can drive ODBC.&amp;nbsp; OPM accepts connections on the typical MySQL port 3306 on a TCP connection.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Database Selection&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;OPM advertises a number of databases.&amp;nbsp; Two are of interest to this discussion – netapp_model_view and netapp_performance.&amp;nbsp; Database netapp_model_view has tables that define the objects and relationships among the objects for which performance data is collected, such as aggregates, SVMs, clusters, volumes, etc.&amp;nbsp; Database netapp_performance has tables which contain the raw data collected as well as periodic rollups used to quickly generate the graphics OPM presents through its GUI.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Understanding the Data&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Key to understanding the data layout is that OPM assigns each “object” a unique id.&amp;nbsp; These ids are not coordinated with similar id fields maintained in the OCUM databases but only have meaning within the OPM context.&amp;nbsp; The id fields define the relationships between objects.&amp;nbsp; For instance, the query&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2" face="courier new,courier"&gt;SELECT name, objid, clusterId, nodeId FROM aggregates&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;run against the netapp_model_view database will list the known aggregates and the identifiers to which cluster and node the aggregates are associated.&amp;nbsp; You can join on the various related tables through the object ids.&amp;nbsp; Most tables have a base version and a “full” version, e.g. “aggregates” and “aggregates_full”.&amp;nbsp; The full version seems to add just the column “objstate” to the data already available in the base version.&amp;nbsp; I suspect that the base versions will be essentially stable and that the full versions may offer additional columns as OPM evolves in future versions.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Additional tables of interest in netapp_model_view are “change_delete_detail”, “change_record”, and ”changed_attribute”.&amp;nbsp; These tables track object based changes over time as OPM discovers them.&amp;nbsp; For example, a typical operation is to move a volume between aggregates. &amp;nbsp;For that change the “change_record” table tracks&amp;nbsp;type (“volume_move” in this case) the object moved by object id, the cluster affected by cluster object id, and the time it was noticed in OPM.&amp;nbsp; The change records are needed for a complete performance analysis over time – for instance a 30 day view of the I/O load of the aggregate containing a particular volume needs to take into account whether that volume moved between aggregates during that time frame so the proper data is used in each part of the analysis.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Timestamps within the data set are UNIX style time since epoch.&amp;nbsp; The timestamp includes milliseconds in the value, so be sure that your time conversion utilities take that into account.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Performance Data&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Database “netapp_performance” contains the actual data samples collected.&amp;nbsp; All tables of the form “sample_*” are the raw performance data collected for that period of time.&amp;nbsp; Each table row contains the OPM object id for the element, the timestamp of the collection, and the raw data.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;The trick for the performance tables is that not every table type is what I call simple.&amp;nbsp; For instance, there is no “sample_aggregate” table.&amp;nbsp; Instead, there is one sample_aggregate table per cluster, with the cluster’s object id appended to the base name “sample_aggregate” - for example “sample_aggregate_1748” which contains all aggregate samples for the cluster having OPM object id 1748.&amp;nbsp; Other tables that have an embedded object id typically appear to be related to the highest level object that owns the object.&amp;nbsp; For instance, aggregates can trace physically to cluster, volumes trace logically to SVMs, etc.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;The “summary” versions of the tables contain roll-ups of the sample data.&amp;nbsp; OPM is supposed to track 90 days of historical data for display purposes.&amp;nbsp; I haven’t analyzed how long the detail is kept versus the rollup summaries.&amp;nbsp; Any really long term data collection would ned to extract data from OPM and store in another system.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;I hope this basic discussion of the OPM data layout is useful to those wanting to customize performance data presentation.&amp;nbsp; OPM 1.1 also includes two additional data access methods – a regular push feed to external tools as well as a REST API to gather data on demand.&amp;nbsp; So far I’ve not seen detail documentation on either of these (such as the format of the push data stream, etc.) but I understand that such documentation is expected sometime during the 1st quarter of 2015.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;EM&gt;&lt;STRONG&gt;Disclaimer&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;I remind everyone that I’m just a customer – I don’t speak for NetApp nor do I make any representations on their behalf.&amp;nbsp; Everything discussed is based on either direct personal research or other information gathered that is not subject to NDA or similar restrictions.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Bob Greenwald&lt;/FONT&gt;&lt;/P&gt;</description>
    <pubDate>Thu, 05 Jun 2025 05:12:32 GMT</pubDate>
    <dc:creator>bobshouseofcards</dc:creator>
    <dc:date>2025-06-05T05:12:32Z</dc:date>
    <item>
      <title>OnCommand Performance Manager 1.1 – Database Access and Design</title>
      <link>https://community.netapp.com/t5/Active-IQ-Unified-Manager-Discussions/OnCommand-Performance-Manager-1-1-Database-Access-and-Design/m-p/99886#M17609</link>
      <description>&lt;P&gt;&lt;FONT size="2"&gt;OnCommand Performance Manager (OPM) 1.1 features user access to the underlying data collected allowing integration into third party tools and creation of custom data presentations.&amp;nbsp; The database details have not yet been published in the Release Candidate documentation to date, but this post covers what I’ve worked out so far.&amp;nbsp; Everything is subject to change of course before the final release (&lt;EM&gt;please see disclaimer at the end of this post&lt;/EM&gt;). &amp;nbsp;As there have been some other posts interested in the topic, I wanted to share what I’ve learned.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Database Access Setup&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Both OPM 1.1 and the companion OnCommand Unified Manager (OCUM) 6.2 release candidates support a new user role “Database User”.&amp;nbsp; This user is configured in the same manner as any other user through the GUI under the Administration / Manage User menu pulldowns.&amp;nbsp; A limitation on the Database User role is that the defined user must be a locally authenticated user.&amp;nbsp; You cannot use any remote authentication such as LDAP or Active Directory for this role at the current time.&amp;nbsp; So you’ll have to add one more line item to the password rotation element of your normal security maintenance plan when you add database users to either OCUM or OPM.&amp;nbsp; Additionally, OCUM and OPM do not share local user definitions – if you hook multiple OPMs under a single OCUM, you need to add and maintain database users separately to each instance.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Accessing the Database&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;OPM uses the MySQL database engine.&amp;nbsp; You can use any driver/database connection mechanism to access the DB that supports MySQL.&amp;nbsp; For example, you can install the ODBC drivers for MySQL on a Windows platform and thus make the database accessible to any application that can drive ODBC.&amp;nbsp; OPM accepts connections on the typical MySQL port 3306 on a TCP connection.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Database Selection&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;OPM advertises a number of databases.&amp;nbsp; Two are of interest to this discussion – netapp_model_view and netapp_performance.&amp;nbsp; Database netapp_model_view has tables that define the objects and relationships among the objects for which performance data is collected, such as aggregates, SVMs, clusters, volumes, etc.&amp;nbsp; Database netapp_performance has tables which contain the raw data collected as well as periodic rollups used to quickly generate the graphics OPM presents through its GUI.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Understanding the Data&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Key to understanding the data layout is that OPM assigns each “object” a unique id.&amp;nbsp; These ids are not coordinated with similar id fields maintained in the OCUM databases but only have meaning within the OPM context.&amp;nbsp; The id fields define the relationships between objects.&amp;nbsp; For instance, the query&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2" face="courier new,courier"&gt;SELECT name, objid, clusterId, nodeId FROM aggregates&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;run against the netapp_model_view database will list the known aggregates and the identifiers to which cluster and node the aggregates are associated.&amp;nbsp; You can join on the various related tables through the object ids.&amp;nbsp; Most tables have a base version and a “full” version, e.g. “aggregates” and “aggregates_full”.&amp;nbsp; The full version seems to add just the column “objstate” to the data already available in the base version.&amp;nbsp; I suspect that the base versions will be essentially stable and that the full versions may offer additional columns as OPM evolves in future versions.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Additional tables of interest in netapp_model_view are “change_delete_detail”, “change_record”, and ”changed_attribute”.&amp;nbsp; These tables track object based changes over time as OPM discovers them.&amp;nbsp; For example, a typical operation is to move a volume between aggregates. &amp;nbsp;For that change the “change_record” table tracks&amp;nbsp;type (“volume_move” in this case) the object moved by object id, the cluster affected by cluster object id, and the time it was noticed in OPM.&amp;nbsp; The change records are needed for a complete performance analysis over time – for instance a 30 day view of the I/O load of the aggregate containing a particular volume needs to take into account whether that volume moved between aggregates during that time frame so the proper data is used in each part of the analysis.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Timestamps within the data set are UNIX style time since epoch.&amp;nbsp; The timestamp includes milliseconds in the value, so be sure that your time conversion utilities take that into account.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT size="3"&gt;Performance Data&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Database “netapp_performance” contains the actual data samples collected.&amp;nbsp; All tables of the form “sample_*” are the raw performance data collected for that period of time.&amp;nbsp; Each table row contains the OPM object id for the element, the timestamp of the collection, and the raw data.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;The trick for the performance tables is that not every table type is what I call simple.&amp;nbsp; For instance, there is no “sample_aggregate” table.&amp;nbsp; Instead, there is one sample_aggregate table per cluster, with the cluster’s object id appended to the base name “sample_aggregate” - for example “sample_aggregate_1748” which contains all aggregate samples for the cluster having OPM object id 1748.&amp;nbsp; Other tables that have an embedded object id typically appear to be related to the highest level object that owns the object.&amp;nbsp; For instance, aggregates can trace physically to cluster, volumes trace logically to SVMs, etc.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;The “summary” versions of the tables contain roll-ups of the sample data.&amp;nbsp; OPM is supposed to track 90 days of historical data for display purposes.&amp;nbsp; I haven’t analyzed how long the detail is kept versus the rollup summaries.&amp;nbsp; Any really long term data collection would ned to extract data from OPM and store in another system.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;STRONG&gt;Conclusion&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;I hope this basic discussion of the OPM data layout is useful to those wanting to customize performance data presentation.&amp;nbsp; OPM 1.1 also includes two additional data access methods – a regular push feed to external tools as well as a REST API to gather data on demand.&amp;nbsp; So far I’ve not seen detail documentation on either of these (such as the format of the push data stream, etc.) but I understand that such documentation is expected sometime during the 1st quarter of 2015.&amp;nbsp;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="3"&gt;&lt;EM&gt;&lt;STRONG&gt;Disclaimer&lt;/STRONG&gt;&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;I remind everyone that I’m just a customer – I don’t speak for NetApp nor do I make any representations on their behalf.&amp;nbsp; Everything discussed is based on either direct personal research or other information gathered that is not subject to NDA or similar restrictions.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT size="2"&gt;Bob Greenwald&lt;/FONT&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 05 Jun 2025 05:12:32 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Active-IQ-Unified-Manager-Discussions/OnCommand-Performance-Manager-1-1-Database-Access-and-Design/m-p/99886#M17609</guid>
      <dc:creator>bobshouseofcards</dc:creator>
      <dc:date>2025-06-05T05:12:32Z</dc:date>
    </item>
    <item>
      <title>Re: OnCommand Performance Manager 1.1 – Database Access and Design</title>
      <link>https://community.netapp.com/t5/Active-IQ-Unified-Manager-Discussions/OnCommand-Performance-Manager-1-1-Database-Access-and-Design/m-p/99903#M17614</link>
      <description>&lt;P&gt;Grreat! Thanks for sharing this information.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;</description>
      <pubDate>Thu, 29 Jan 2015 05:55:48 GMT</pubDate>
      <guid>https://community.netapp.com/t5/Active-IQ-Unified-Manager-Discussions/OnCommand-Performance-Manager-1-1-Database-Access-and-Design/m-p/99903#M17614</guid>
      <dc:creator>hariprak</dc:creator>
      <dc:date>2015-01-29T05:55:48Z</dc:date>
    </item>
  </channel>
</rss>

