Foxhound now supports target databases that use SQL Anywhere 16, as well as target databases running in an OnDemand 1.0 cloud environment.
The new Connection History
page shows the performance of a single connection over time.
The Connection History page is available for target databases running on SQL Anywhere 9 and later.
It shows the same data as the connection section of the Sample History page,
except it shows only one connection instead of many, and multiple samples instead of only one sample per connection.
The Monitor and Sample History pages are now simpler and easier to read because all the information
about a blocked connection is now found in one place.
All except for one column, that is: the Blocked by Transaction Running Time (the Transaction Running
Time of the other connection) was removed because was easily confused with the Transaction Running Time
of the blocked connection.
The Blocked by Transaction Running Time can be determined by looking at the details for that other
connection, which can be displayed by clicking on the Blocked By: link.
2. New Features
The new Change Target Settings
page lets you set RememberLastPlan, RememberLastStatement and RequestTiming.
The new Change Target Settings popup window lets you change target server options on the fly,
to control the level of detail available for Foxhound to display: RememberLastPlan, RememberLastStatement and RequestTiming.
You can open this popup via links on the Monitor, Sample History and Monitor Options pages.
The Monitor and Sample History pages have been enhanced to display the machine or host name used for the target database,
as well as the SQL Anywhere server and database names.
These fields have been added as part of the support for OnDemand 1.0 environments where it's important to
know which target database is which when there are many hundreds spread across different servers and hosts.
The Alert email subject has been simplified and expanded:
Alert #n title - "name / machine / server / database"
The first line in the email body now looks like this:
Foxhound Alert #n went into effect for database "name(id) / machine / server / database" at yyyy-mm-dd hh:nn:ss:
The new OS User
column has been added to help identify connections: Conn #, ID, OS User, IP, Name.
Many applications use the same database user id (ID) for all connections so it's hard to tell who's doing what.
The new OS User column has been added to help with that.
The new Busy, Wait, Idle
columns have been added for each connection.
The cumulative Busy, Wait, Idle percentage columns have been added to the Monitor and Sample History pages to show how each connection has spent the time since it was established:
Busy is the percentage of time the connection was busy processing requests,
Wait is the percentage of time the connection was waiting for
atomic access to a resource,
I/O to complete
a lock to be acquired, and/or
the server to process requests.
Idle is the percentage of time the connection was neither busy nor waiting.
The Parent, Child Conns column set show the numbers of parent and child (internal) connections to target databases running on SQL Anywhere 12 or later.
Child Conns is a new column, and a separate entry has been added to the peaks row.
The new total Waiting Time
column has been added to the Foxhound Monitor.
A new Waiting Time column has been added to the Locks Held, Conns Blocked, Waiting Time column set in the sample section of the Monitor and Sample History pages.
It contains the total time all current connections were blocked or forced to wait during the previous interval.
The new Waiting Time column is calculated from the existing Waiting Time column in the connection section,
but rather than show the cumulative waiting time since the connections started, the new Waiting Time column
shows the total time spent waiting during the previous sample interval.
Waiting Time is a new column, and a separate entry has been added to the peaks row.
The new Last Plan Text
column has been added to the connection section.
The Last Plan Text line has been added to the connection section of the Monitor and Sample History display pages,
and to the new Connection History page.
The "Favorable? xxx" field on the Monitor and Sample History pages shows whether or not the target server is gathering extra diagnostic data that Foxhound can display.
The "xxx" string is made up of Y, N and/or - characters, where - means "unknown". The three characters correspond to these target server settings:
RememberLastPlan, RememberLastStatement and RequestTiming.
The "Favorable?" field is also a link that lets you open the new Change Target Settings popup window.
You can now specify Purge after [xx] day(s)
instead of being limited to 1 day, 1 week, 1 month or 1 year.
The Purge section of the Foxhound Options page now gives you complete freedom in setting the thresholds for deleting data.
Purge all sample data enabled: [x] after [xx] day(s)
Purge uninteresting connection data enabled: [x] after [xx] day(s)
The Monitor and Sample History page now display the Purge field to let you know how soon your data's going to be deleted.
CPU Time calculations
have been improved for connections using intra-query parallelism.
The CPU Time is no longer displayed as zero for a connection making heavy use of intra-query parallelism.
When a connection makes use of the intra-query parallelism feature, it spawns a number of internal child connections which do most of the work;
e.g., one INT: EXCHANGE child connection for each available processor.
SQL Anywhere tends to report the total CPU time used by all the child connections as the ApproximateCPUTime value for each child connection in use,
and almost none for the parent connection. This inflates the amount of CPU time used by each child connection without reporting any CPU usage
by the parent connection.
In an attempt to make sense of this behavior, Foxhound now calculates the average non-zero ApproximateCPUTime for the child connections
and reports it as as the CPU time for the parent connection.
The inflated values reported by SQL Anywhere for each child connection are still shown by Foxhound; only the parent connection CPU time is adjusted.
One consequence of this improvement is that AutoDrop #5 CPU Usage now works on parent connections using intra-query parallelism whereas before it did not.
Note that the AutoDrop process is never performed on a child connection or any other internal connection that isn't directly associated with a client application.
The separate Req, Commits and Bytes In/Out columns have been gathered into the new connection-level
Volume... Req, Commits, Bytes columns.
The new Connection Id String
can be used to uniquely identify connections in adhoc queries; e.g., '1-1-20140504073924-692'.
A new emergency patch process is built in to Foxhound for fixing bugs without running a full upgrade.
An "Emergency Patch" process has been built into Foxhound whereby SQL patch scripts may be
provided in the future and automatically applied to the Foxhound database at startup time.
Alert #30. Database read-only. The target database has changed from accepting updates to read-only processing.
Alert #31. Database updatable. The target database has changed from read-only processing to accepting updates.
Alert #32. Rollback log usage. The total rollback log space used by all connections has been 1G or larger for 10 or more recent samples.
Alert #33. Uncommitted operations. The total number of uncommitted operations for all connections has reached 1,000,000 or more during 10 or more recent samples.
Alert #34. Long uncommitted. The number of uncommitted operations has reached 10 or more while the transaction running time has reached 1m or more for at least one connection.
Alert #12 HA mode change has been removed and replaced by Alert #30 and #31 for the following reasons:
An Alert #12 was issued for non-HA databases when they are restarted with dbsrv16 -r for read-only operations,
an Alert #12 all-clear never appeared for a non-HA database, and
an Alert #12 appeared exactly once for a non-HA database when it changed from updatable to read-only.
For a new installation of Foxhound 3, the five new Alerts are all enabled by default.
For an upgrade from an existing installation of Foxhound 2 or earlier, the new Alerts are disabled
on the Monitor Options page for all existing target databases (to avoid surprises) as well as the "Default Settings",
but they are enabled in the "Factory Settings" and "Extreme Settings".
After an upgrade
if you want to enable the new Alerts for an existing target database, you will have to use the Monitor Options page to set that up, and
if you want to enable the new Alerts by default for new target databases, you will have to use the Monitor Options page to modify the "Default Settings".
The new DB File and Used
columns have been added to the Foxhound Monitor.
Foxhound now keeps track of the amount of disk space allocated to the SYSTEM DBSPACE (the DB File column) and the percentage of that space used to store data (the Used column).
The new Hide Details and Show Details
buttons let you reduce scrolling on the Sample History and Connection History pages.
Buttons have been added to the connection section of the Sample History page as well as the Connection History page
to hide and show the following lines for each connection:
AutoDrop Result:
Blocked By:
Block Reason:
Locked Row Query:
Last Statement:
Last Plan Text:
The new Show More and Show Less
buttons let you expand and contract the Last Statement and Last Plan Text connection data.
Buttons have been added to the Last Statement and Last Plan Text connection-level fields to Show More and Show Less of the data:
The display starts off in "space saving" mode:
Last Statement: Show More select "COUNT_BIG"() from "SYSCOLUMN" as "A" cross join "SYSCOLUMN" as "B" cross join "...
Last Plan Text: Show More ( Plan ( SingleRowGroupBy ( Exchange [ 8 ] ( SingleRowGroupBy ( Nested...
When you Show More all the data is displayed:
Last Statement: Show Less
select "COUNT_BIG"()
from "SYSCOLUMN" as "A"
cross join "SYSCOLUMN" as "B"
cross join "SYSCOLUMN" as "C"
Last Plan Text: Show Less
( Plan
( SingleRowGroupBy
( Exchange [ 8 ]
( SingleRowGroupBy
( NestedLoopsJoin
( NestedLoopsJoin
( ParallelTableScan ( ISYSTABCOL col ) )
( TableScan ( ISYSTABCOL col ) )
)
( TableScan ( ISYSTABCOL col ) )
)
)
)
)
)
Duplicate Foxhound sampling sessions. There is more than one Foxhound connection to this target database.
This can happen when two different Foxhound connection strings are created pointing to the same target database,
or a ODBC DSN is used as well as a Foxhound connection string. This is almost always a mistake, and it can lead to multiple Alert email
messages when the duplicate sampling sessions all detect the same condition; e.g., Alert #1 Database unresponsive.
The Foxhound option to show the Help frame
is turned back on when Foxhound is upgraded, as a reminder that new Help content is available.
Descriptive text has been added to all menu items on the
Monitor Options page.
The Peaks since
timestamp has radically abbreviated to reduce horizontal scrolling.
There's no more "Can't open Message window log file" message when starting Foxhound.
All the desktop shortcuts that start the Foxhound database have been modified to run the dbping.exe utility
before running dbsrv16.exe. If the dbping utility determines that that the Foxhound database is already running,
it doesn't bother running dbsrv16 and skips straight to launching Foxhound in the browser... not only is
the whole process much faster, it eliminates the annoying error message "Can't open Message window log file".
The default connection string for starting the Adhoc Schema database has been
renamed to "Foxhound 3 Adhoc Schema - autostart and connect".
You can select this connection string and click on the Display Schema button to see
all the views and tables that are available for adhoc reporting.
The name has been changed to include "Foxhound 3" to differentiate this
database from earlier versions of Foxhound.
If the current copy of Foxhound was upgraded from Foxhound version 2, the previous
Adhoc Schema connection string was renamed to "old Foxhound 2 Adhoc Schema - autostart and connect"
during the upgrade process.
The handling of the diagnostic text files produced during the Foxhound Post Setup process has been improved.
The Extended Edition of Foxhound no longer limits the number of separate copies of the Foxhound database
that may be created and started using separate instances of SQL Anywhere on the same local network.
This eliminates the previous limit of 1,000 target databases that may be monitored (10 copies of Foxhound x 100 target databases per copy).
Note: Here's what the End User License Agreement has to say...
In the case of the Extended Edition, an unlimited number of copies of the Foxhound database may be created and started using separate instances of SQL Anywhere on the same local network, with the requirement that a separate Extended Edition registration key be purchased for each multiple of 10 copies of Foxhound started.
Some Help topics previously found only in the
Foxhound FAQ have been moved to the Help.
In particular, all links from the Help pages to the FAQ pages have been
eliminated by "bringing home" those topics to the Help.
The Foxhound FAQ exists in one location only (the web at Foxhound 3.0 FAQ),
while the Help exists in three locations:
in the Foxhound database for display in the Foxhound Help frame,
as a separate set of local HTML files for display via All Programs - Foxhound 3 - Help, and
The Cumulative CPU Time and Total Waits columns have been removed from connection-level displays.
These numbers proved to be of little use so they were removed
to make room for other numbers.
However, the property values on which they
were based are still available for adhoc reporting.
The Client Requests, Time columns have been removed from connection-level displays.
The Client Requests column (based on the RequestsReceived property) has been removed from the
connection section of the Monitor and Sample History pages in order to reduce confusion with
the server Req column, and the Time column (based on the ReqTimeActive property) has been removed
because it is not directly related to client requests.
Both property values are still available for adhoc reporting using the sample_connection view, and
the ReqTimeActive property is now used in the calculation of the Busy portion of the new Busy, Wait, Idle columns.
The Total, Current Prepares and Rollbacks columns have been removed from connection-level displays.
These numbers proved to be of little use so they were removed
to make room for other numbers.
However, the property values on which they
were based are still available for adhoc reporting.
The Bytes In / Out columns have been removed from connection-level displays and summarized in
Volume... Req, Commits, Bytes.
Alert #11 was formerly described as HA failover - The high availability target database server has switched over to [server2].
It is now described as ServerName change - The real server name has changed to [server2], possibly because of an HA failover or OnDemand move.
The reason for this change is that it is possible for a target database to be shut down on purpose and
restarted with a different server name without High Availability being involved or a failover occurring.
For example, when a database is running in a volatile OnDemand cloud environment it is quite likely that
it may be moved from one server to another.
The alert description has been changed to stick to the facts, that PROPERTY ( 'ServerName' ) has changed
which may or may not be the result of an HA failover or an OnDemand database move to a different server.
The Waiting Req column has been renamed to
Unsch Req
to reduce confusion with SQL Anywhere documentation.
The Monitor and Sample History pages now show the title "Unsch Req" instead of "Waiting Req" for the columns based on the UnschReq property.
This has been done to reduce confusion between this and other properties which use the word "waiting" in their descriptions...
and to reflect the fact that "unscheduled requests" is common parlance when talking about this property.
The data remains unchanged, only the titles are affected.
Previously, the sort order of the connections section on the Monitor page could be changed
by clicking anywhere on the Last Statement line.
That behavior has now changed so that you must click the "Last Statement" title text
to change the sort order. Clicking on the Last Statement data value has no effect.
The security rules
are different for connecting to SQL Anywhere 16 target databases.
The new role-based security model introduced by SQL Anywhere 16 affects how Foxhound connects to those databases.
For example, the Foxhound connection to a SQL Anywhere 16 target database must use a user id with the MONITOR
system privilege in order to gather information about all the connections to that database.
Without the MONITOR privilege, Foxhound will only be able to display information about its own connection.
The dbsrv16 -ufd restart
option has been added to the desktop shortcuts to keep Foxhound running.
Foxhound is no longer being extensively tested on Windows XP or IE8.
The Rollbacks column has been removed from database-level displays.
This number proved to be of little use so it was removed
to make room for other numbers.
However, the property value on which it
was based is still available for adhoc reporting.
The Throughput... Commits
column has been rounded so rates like 0.099/s are displayed as 0.1/s, because the extra precision was not helpful.
5. Bug Fixes
Support for Snapshot Isolation
has been added, thus eliminating the fatal "Cannot convert 'Snapshot' to a decimal" error.
Previously Foxhound expected the Isolation Level to be a numeric value.
This error has now been fixed.
The "Column '@alert11_actual_current_ServerName' not found" error has been fixed.
After an Alert #11 HA failover (now Servername changed) was issued, an attempt to use the Monitor Options
page resulted in the error message "Column '@alert11_actual_current_ServerName' not found".
When sampling was started for a database running in an OnDemand cloud environment
an invalid Alert #9 was immediately issued: "Arbiter unreachable. The high availability
target database has become disconnected from the arbiter server."
This error has now been fixed.
The ALTER MATERIALIZED VIEW statement has been moved after CREATE INDEX on the
Display Schema page.
Previously an ALTER MATERIALIZED VIEW IMMEDIATE REFRESH statement would be generated ahead of a CREATE UNIQUE INDEX statement,
which is the wrong order for execution.
The email status is no longer displayed as "Email sent, status unknown." before the attempt to send an email is actually made.
The popup tips for several
Alert and
AutoDrop criteria
fields on the Monitor Options page have been changed to "Percent, 1 to 100".
The minimum input value for the AutoDrop #3 Long transaction
duration field on the Monitor Options pages has been changed to 1.0s.
Bad input values entered on the Monitor Options page for integer
Alert and
AutoDrop criteria
fields are now silently changed to the minimum allowed values.
The Foxhound Options - Purge Run
report no longer displays 2 as the number of Orphan/Old Sample Set Rows Deleted when no change is reported in the total number of rows.
The Start Foxhound via Chrome shortcut no longer has trouble finding Chrome.
The No Transaction Log curiosity message
is no longer displayed for read-only databases.
An error message is displayed instead of suppressing the sample when Foxhound
can't call sa_locks()
to diagnose a blocked connection.
The handling of invalid SQL Anywhere property values coming from target databases has been improved.
Heartbeat durations
are no longer rounded upwards; instead, values between .001s and 0.099s are changed to 0.1s to distinguish them from 0s.
Foxhound no longer tries to AutoDrop
the same connection more than once.
A dropped connection may keep running for a while as SQL Anywhere rolls back
its work even though the client application has been disconnected.
For that reason Foxhound will not try to AutoDrop a connection more than once.
The CPOOL=NO connection parameter has been added to the connection string Foxhound uses to
connect to target databases.
This does not affect target databases running on SQL Anywhere 11 or earlier, but it does help prevent problems
when sampling is stopped and restarted on target databases running on SQL Anywhere 12 and later.
Previously Foxhound was unable to read the startup.txt file when started as a service.
This error has now been fixed.
Safe Mode startup
now marks all timed out sampling sessions as no longer timed out, just stopped.
Safe Mode startup is supposed to stop all sampling sessions in such a way the can only be restarted manually.
Previously Foxhound did not clear the timed out status of a stopped sampling session when Foxhound was started in Safe Mode.
That meant when Foxhound was restarted in non-Safe Mode it would automatically restart the timed out sampling session
when the timeout retry period passed, thus defeating one of the reasons for using Safe Mode startup in the first place.
The same three global checkboxes (Enable Emails, Enable Schedules and Enable Autodrop) can be updated
by the user in two different places: the Global Overrides sections of the Foxhound Options and Monitor Options pages.
Previously, switching back and forth (e.g., saving a change on one page and then clicking Save on the other page)
could result in the wrong checkbox value being saved and/or displayed.