org.firebirdsql.management.FBStatisticsManager Maven / Gradle / Ivy
Show all versions of jaybird Show documentation
/*
* Firebird Open Source J2EE Connector - JDBC Driver
*
* Copyright (C) All Rights Reserved.
*
* This file was created by members of the firebird development team.
* All individual contributions remain the Copyright (C) of those
* individuals. Contributors to this file are either listed here or
* can be obtained from a CVS history command.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* - Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following
* disclaimer in the documentation and/or other materials provided
* with the distribution.
* - Neither the name of the firebird development team nor the names
* of its contributors may be used to endorse or promote products
* derived from this software without specific prior written
* permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
package org.firebirdsql.management;
import java.sql.SQLException;
import org.firebirdsql.gds.ISCConstants;
import org.firebirdsql.gds.ServiceRequestBuffer;
import org.firebirdsql.gds.impl.GDSType;
/**
* The FBStatisticsManager
class is responsible for replicating
* the functionality of the gstat
command-line tool.
* This functionality includes:
*
* - Retrieving data table statistics
*
- Retrieving the database header page
*
- Retrieving index statistics
*
- Retrieving database logging information
*
- Retrieving statistics for the data dictionary
*
*
* @author Gabriel Reid
*/
public class FBStatisticsManager extends FBServiceManager
implements StatisticsManager {
private static final int possibleStatistics =
DATA_TABLE_STATISTICS | SYSTEM_TABLE_STATISTICS | INDEX_STATISTICS |
RECORD_VERSION_STATISTICS;
/**
* Create a new instance of FBMaintenanceManager
based on
* the default GDSType.
*/
public FBStatisticsManager()
{
super();
}
/**
* Create a new instance of FBMaintenanceManager
based on
* a given GDSType.
*
* @param gdsType type must be PURE_JAVA, EMBEDDED, or NATIVE
*/
public FBStatisticsManager(String gdsType)
{
super(gdsType);
}
/**
* Create a new instance of FBMaintenanceManager
based on
* a given GDSType.
*
* @param gdsType The GDS implementation type to use
*/
public FBStatisticsManager(GDSType gdsType){
super(gdsType);
}
/**
* Fetch the database statistics header page. The header information is
* written to this StatisticsManager
's logger.
*
* @throws SQLException if a database access error occurs
*/
public void getHeaderPage() throws SQLException {
ServiceRequestBuffer srb = createStatsSRB(
ISCConstants.isc_spb_sts_hdr_pages);
executeServicesOperation(srb);
}
/**
* Get the full database statistics information, excluding system table
* information. The statistics information is written to this
* StatisticsManager
's logger.
*
* The listed data includes:
*
* - statistics header page
*
- log statistics
*
- index statistics
*
- data table statistics
*
*
* Invoking this method is equivalent to the default behaviour of
* gfix
on the command-line.
*
* @throws SQLException if a database access error occurs
*/
public void getDatabaseStatistics() throws SQLException {
ServiceRequestBuffer srb = createDefaultStatsSRB();
executeServicesOperation(srb);
}
/**
* Get specific database statistics. The statistics information is written
* to this StatisticsManager
's logger. All invocations of
* this method will result in the header page and log data being output.
* The following options can be supplied as a bitmask:
*
* DATA_TABLE_STATISTICS
* SYSTEM_TABLE_STATISTICS
* INDEX_STATISTICS
*
*
* If this method is invoked with 0
as the
* options
value, only the header and log statistics will
* be output.
*
* @param options A bitmask combination of
* DATA_TABLE_STATISTICS
,
* SYSTEM_TABLE_STATISTICS
, or
* INDEX_STATISTICS
. Can also be 0
.
*/
public void getDatabaseStatistics(int options) throws SQLException {
if (options != 0 && (options | possibleStatistics) != possibleStatistics){
throw new IllegalArgumentException("options must be 0 or a "
+ "combination of DATA_TABLE_STATISTICS, "
+ "SYSTEM_TABLE_STATISTICS, INDEX_STATISTICS, or 0");
}
ServiceRequestBuffer srb = createStatsSRB(options);
executeServicesOperation(srb);
}
/**
* Get the table statistics. The statistics information is written
* to this StatisticsManager
's logger.
*
* The listed data includes:
*
* - the primary pointer and index root page numbers
*
- number of data pages and their average fill
*
- fill distribution
*
*
* Invoking this method is equivalent to the behaviour of
* gstat -t on the command-line.
*
* @param tableNames array of table names to analyze.
*
* @throws SQLException if something went wrong.
*/
public void getTableStatistics(String[] tableName) throws SQLException {
ServiceRequestBuffer srb = createStatsSRB(ISCConstants.isc_spb_sts_table);
// create space-separated list of tables
StringBuffer commandLine = new StringBuffer();
for (int i = 0; i < tableName.length; i++) {
commandLine.append(tableName[i]);
if (i < tableName.length - 1)
commandLine.append(' ');
}
//FIXME should be isc_spb_command_line, but FB 2.0 does not like it
srb.addArgument(ISCConstants.isc_spb_command_line, commandLine.toString());
executeServicesOperation(srb);
}
//---------- Private implementation methods -----------------
/**
* Get a mostly empty buffer that can be filled in as needed.
* The buffer created by this method cannot have the options bitmask
* set on it.
*/
private ServiceRequestBuffer createDefaultStatsSRB(){
return createStatsSRB(0);
}
/**
* Get a mostly-empty repair-operation request buffer that can be
* filled as needed.
*
* @param options The options bitmask for the request buffer
*/
private ServiceRequestBuffer createStatsSRB(int options){
return createRequestBuffer(
ISCConstants.isc_action_svc_db_stats,
options);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy