We have a separate SQL database to the NPM database which is used to store long-term statistics on specific interfaces that are being monitored by NPM. This allows us to keep data on certain interfaces longer than the standard retention period for the statistics that are gathered by NPM.
As part of this we use the SolarWinds defined SQL functions GetInBps95th and GetOutBps95th to generate the 95th percentile for specific interfaces. These functions use the data in the InterfaceTraffic view. We are specifically using the functions to summarise data in the InterfaceTraffic_Detail table of the NPM database. We have found that at times the 95th percentile value for certain interfaces over a day was lower than the average value value for the same interface. This is very unusual. There are only a few situations in which I can think that this would normally happen. For example if the interface utilisation is around 100% for a small number of observations and is running very close to 0% for the rest of the time (that is for over 95% of the observations) you will get a 95th percentile value that is lower than the average. Unfortunately this was not the case for the interfaces where the 95th percentile value was was lower than the average.
After extensive examination of the raw data it appears that the functions GetInBps95th and GetOutBps95th treat interface data that contains NULL values as zero values. This is normally not an issue as it is uncommon to have NULL values in the columns of the InterfaceTraffic_Detail table. However we found that we have a number of interfaces where there is a high percentage of NULL values. This turns out to be catastropic when you use the functions GetInBps95th and GetOutBps95 to calculate the 95th percentile of the data. When the NULL values are treated like zero values by the SQL functions it means that the 95th Percentile value is a lot lower than it should be if the observations with the NULL values were ignored by the function.
When you look at the interface utilisation charts or graphs provided in NPM, you can select that the 95th percentile value is shown on the graph. It turns out that for interfaces where there are NULL values the SolarWinds graphs correctly ignore these observations and only the valid data values are used when calculating 95th percentile values. I imagine that within NPM some additional filtering of the interface observation data is being performed to enable the allow the interface utilisation graphs to display the correct 95th percentile values, however it is not clear how this is done.
What I would like to know is whether anyone else has encountered the issue where the SQL functions GetInBps95th and GetOutBps95th do not handle NULL values. We would really prefer to use the NPM database to correctly summarise the raw data so that the NULL values are ignored. If there is anyone out there who may have a solution to this issue, I would really appreciate some assistance.