powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
25 сообщений из 78, страница 1 из 4
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38492989
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hi all

Понадобилось тут утилитку одну сбацать, чтобы 1 раз в NN секунд вызывала isc_database_info() и логировала значения кумулятивных reads/writes/fetches/marks.

Читаю ководство по JayBird'у 2.2.1 (более свежего нету) и не въеду что-то: где там вызов чего-то аналогичного ? Расписаны (в разделе 'Working with services') бекапы с ресторами, шатдаун, управление усерам и гстат. И - всё.

И как тогда достукиваться до самой сокровенной инфы ?

ЗЫ. Попробовал коннект с вызовом его getDatabaseStatistics() - это просто выброс gstat -r, не более. А другого по теме статистики что-то не вижу...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493023
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я такое делал 14 лет назад
http://www.ibase.ru/d_ibapi.htm
см IB Monitor

но насколько я помню, эта информация аккумулируется только для суперсервера.

ТаблоидЧитаю ководство по JayBird'у 2.2.1
именно JayBird надо?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493167
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvТаблоидЧитаю ководство по JayBird'у 2.2.1
именно JayBird надо?мне всё равно, лишь бы через какой-нибудь jdbc туда достукаться
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493171
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvсм IB MonitorПосмотрел. Он не рефрешит статистику и не пишет лог. Что есть жаль.
ЗЫ. У меня именно SuperServer, мне как раз и надо "аккумуляторные" значения логировать.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493308
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,
насколько я помню - рефрешит. но в лог не пишет, мне это не было нужно.
на Дельфи 7-2007 скомпилировать - 5 сек.
на JayBird - ищи любые примеры использования isc_database_info
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493349
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

нарыл я это: http://www.firebirdsql.org/file/documentation/drivers_documentation/java/2.2.3/docs/org/firebirdsql/jca/FBConnectionRequestInfo.html
да только как объект его создать - не врубаюсь.
там аргументом должен быть объект, реализующий интерфейс DatabaseParameterBuffer, а судя по этой же доке, елинственным классом, который его реализует, является сам FBConnectionRequestInfo.
Замкнутый круг какой-то.

У кого-нить есть пример юзания FBConnectionRequestInfo, для старта ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493458
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Насколько я понял, FBConnectionRequestInfo это не то, что тебе нужно.
Но попробуй получать dataSource.getConnectionRequestInfo();

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493553
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамНасколько я понял, FBConnectionRequestInfo это не то, что тебе нужно.
Но попробуй получать dataSource.getConnectionRequestInfo(); попробовал, получаю не то, что нужно.

Рытьё в доке привело к следующему.

1. В пакете org.firebirdsql.gds имеется междуморд с именем = 'GDS' (да, большими буквами). Насколько смог понять, для создания объекта, реализующего этот интерфейс, можно делать так:
Код: sql
1.
org.firebirdsql.gds.GDS g = org.firebirdsql.gds.GDSObjectFactory.createJavaGDSImpl();

У интерфейса этого есть метод iscDatabaseInfo:
сигнатура iscDatabaseInfo
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
 iscDatabaseInfo 

byte[] iscDatabaseInfo( IscDbHandle  dbHandle,
                     byte[] items,
                     int bufferLength)
                       throws GDSException

Get information about the database to which IscDbHandle is attached. 
The requested parameters are values set in items, and the values in the returned 
byte-array correspond to the requested parameters in items

Parameters:
    dbHandle - Handle to the database for which info is to be retrieved
    items - An array of values from the isc_info_* constant fields from ISCConstants
    bufferLength - The size of the byte array that is to be returned
. . .


При этом первый аргумент относится к IscDbHandle - это тоже интерфейс, вот он: http://www.firebirdsql.org/file/documentation/drivers_documentation/java/2.2.2/docs/org/firebirdsql/gds/IscDbHandle.html public interface IscDbHandle

The interface isc_db_handle represents a socket connection to the database server.Однако, в общем списке-иерархии классов и междумордов JayBird'a я В УПОР НЕ ВИЖУ, какой класс реализаует IscDbHandle

2. В результате чтения второго примера из поставки jayBird'a, родилось что-то несуразное, делающее коннект к базе и даже что-то из-под неё достающее.
Но застрял я именно на том, как подсунуть IscDbHandle - см в спойлере выделенный текст:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
// compile: javac -cp .;jaybird-full-2.2.3.jar DataSource2.java
// run:     java -cp .;jaybird-full-2.2.3.jar DataSource2 1>DataSource2.log 2>DataSource2.err

import org.firebirdsql.gds.*; //DatabaseParameterBuffer;
import org.firebirdsql.jca.*; //FBConnectionRequestInfo;
public final class DataSource2
{
  static public void main (String args[]) throws Exception
  {
    // Create an Firebird data source manually;

    org.firebirdsql.pool.FBWrappingDataSource ds =
        new org.firebirdsql.pool.FBWrappingDataSource();

    // Set the standard properties
    ds.setDatabase ("localhost/3253:C:/1INSTALL/FIREBIRD/FB25SNAP/examples/empbuild/EMPLOYEE.FDB");
    //ds.setBuffersNumber(4096);

    //ds.setDescription ("An example database of employees");

        /*
         * Following properties were not deleted in order to show differences
         * between InterClient 2.01 data source implementation and Firebird one.
         */

    //dataSource.setDataSourceName ("Employee");
    //dataSource.setPortNumber (3060);
    //dataSource.setNetworkProtocol ("jdbc:interbase:");
    //dataSource.setRoleName (null);

    // Set the non-standard properties
    //dataSource.setCharSet (interbase.interclient.CharacterEncodings.NONE);
    //dataSource.setSuggestedCachePages (0);
    //dataSource.setSweepOnConnect (false);

    // this some kind of equivalent to dataSource.setNetworkProtocol(String)
    // possible values are "type4", "type2" and "embedded".
    ds.setType("TYPE4");
    // SQL Role can be set like this:
    // dataSource.setRoleName("USER");
    // Character encoding for the connection is set to NONE
    ds.setEncoding("WIN1251"); // ISO8859_1");
    //ds.setBuffersNumber(8192);

    // other non-standard properties do not have setters
    // you can pass any DPB parameter
    //
    // dataSource.setNonStandardProperty("isc_dpb_sweep", null);
    // dataSource.setNonStandardProperty("isc_dpb_num_buffers", "75");
   ds.setNonStandardProperty("isc_dpb_num_buffers", "8192");


    // Connect to the Firebird DataSource
    try {
      //ds.setLoginTimeout (10);
      java.sql.Connection c = ds.getConnection ("sysdba", "masterke");
      System.out.println(ds.getDatabase());
      DatabaseParameterBuffer dpb = ds.getDatabaseParameterBuffer();

      System.out.println("num_buffers="+ds.getNonStandardProperty("isc_dpb_num_buffers"));

      System.out.println("ForcedWrites="+DatabaseParameterBuffer.FORCE_WRITE);

      System.out.println("DummyPacketinterval="+DatabaseParameterBuffer.DUMMY_PACKET_INTERVAL);

      //System.out.println("SET_PAGE_BUFFERS="+DatabaseParameterBuffer.SET_PAGE_BUFFERS);
      System.out.println("BUFFER_LENGTH="+dpb.getArgumentAsInt(DatabaseParameterBuffer.BUFFER_LENGTH) );

      //System.out.println("NUM_BUFFERS="+dpb.getArgumentAsInt(DatabaseParameterBuffer.NUM_BUFFERS));
      System.out.println("PAGE_SIZE="+dpb.getArgumentAsInt(DatabaseParameterBuffer.PAGE_SIZE));


      org.firebirdsql.gds.GDS g = org.firebirdsql.gds.GDSObjectFactory.createJavaGDSImpl();
//      byte[]b = new byte[16384];
//      g.iscDatabaseInfo(dpb, b, 0);
// ЧТО СЮДА НАДО ЗАТОЛКАТЬ ? КАК ИНСТАНЦИРОВАТЬ ОБЪЕКТ, РЕАЛИЗУЮЩИЙ ИНТЕРФЕЙС IscDbHandle  ?
//      iscDatabaseInfo(IscDbHandle dbHandle, byte[] items, int bufferLength) 

      // At this point, there is no implicit driver instance
      // registered with the driver manager!
      System.out.println ("got connection");
      c.close ();
    }
    catch (java.sql.SQLException e) {
                e.printStackTrace();
      System.out.println ("sql exception: " + e.getMessage ());
    }
  }
}

Короче... есть тут кто предметно знакомый с этим бесконечным джава-миром ? Изабело 8 часов торчать над этой "архисложной" задачей...
Пните в нужную сторону: чё там подставить надо ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493555
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493560
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladЯ в упор вижу вот такоеЯ уже там был. Не взлетает ни хрена!

Вот:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
import org.firebirdsql.gds.*; //DatabaseParameterBuffer;
import org.firebirdsql.jca.*; //FBConnectionRequestInfo;
// Code was modified by Roman Rokytskyy to show that Firebird JCA-JDBC driver
// does not introduce additional complexity in normal driver usage scenario.
//
// An example of using a JDBC 2 Standard Extension DataSource.
// The DataSource facility provides an alternative to the JDBC DriverManager,
// essentially duplicating all of the driver managerТs useful functionality.
// Although, both mechanisms may be used by the same application if desired,
// JavaSoft encourages developers to regard the DriverManager as a legacy
// feature of the JDBC API.
// Applications should use the DataSource API whenever possible.
// A JDBC implementation that is accessed via the DataSource API is not
// automatically registered with the DriverManager.
// The DriverManager, Driver, and DriverPropertyInfo interfaces
// may be deprecated in the future.

public final class DataSource2
{
  static public void main (String args[]) throws Exception
  {
    // Create an Firebird data source manually;

    org.firebirdsql.pool.FBWrappingDataSource ds =
        new org.firebirdsql.pool.FBWrappingDataSource();

    // Set the standard properties
    ds.setDatabase ("localhost/3253:C:/1INSTALL/FIREBIRD/FB25SNAP/examples/empbuild/EMPLOYEE.FDB");
    //ds.setBuffersNumber(4096);

    //ds.setDescription ("An example database of employees");

        /*
         * Following properties were not deleted in order to show differences
         * between InterClient 2.01 data source implementation and Firebird one.
         */

    //dataSource.setDataSourceName ("Employee");
    //dataSource.setPortNumber (3060);
    //dataSource.setNetworkProtocol ("jdbc:interbase:");
    //dataSource.setRoleName (null);

    // Set the non-standard properties
    //dataSource.setCharSet (interbase.interclient.CharacterEncodings.NONE);
    //dataSource.setSuggestedCachePages (0);
    //dataSource.setSweepOnConnect (false);

    // this some kind of equivalent to dataSource.setNetworkProtocol(String)
    // possible values are "type4", "type2" and "embedded".
    ds.setType("TYPE4");
    // SQL Role can be set like this:
    // dataSource.setRoleName("USER");
    // Character encoding for the connection is set to NONE
    ds.setEncoding("WIN1251"); // ISO8859_1");
    //ds.setBuffersNumber(8192);

    // other non-standard properties do not have setters
    // you can pass any DPB parameter
    //
    // dataSource.setNonStandardProperty("isc_dpb_sweep", null);
    // dataSource.setNonStandardProperty("isc_dpb_num_buffers", "75");
   ds.setNonStandardProperty("isc_dpb_num_buffers", "8192");


    // Connect to the Firebird DataSource
    try {

      java.sql.Connection c = ds.getConnection ("sysdba", "masterke");
      System.out.println(ds.getDatabase());
      DatabaseParameterBuffer dpb = ds.getDatabaseParameterBuffer();

      System.out.println("num_buffers="+ds.getNonStandardProperty("isc_dpb_num_buffers"));

      System.out.println("ForcedWrites="+DatabaseParameterBuffer.FORCE_WRITE);

      System.out.println("DummyPacketinterval="+DatabaseParameterBuffer.DUMMY_PACKET_INTERVAL);

      //System.out.println("SET_PAGE_BUFFERS="+DatabaseParameterBuffer.SET_PAGE_BUFFERS);
      // why zero ?? --> System.out.println("BUFFER_LENGTH="+dpb.getArgumentAsInt(DatabaseParameterBuffer.BUFFER_LENGTH) );

      //System.out.println("NUM_BUFFERS="+dpb.getArgumentAsInt(DatabaseParameterBuffer.NUM_BUFFERS));
      // why zero ?? --> System.out.println("PAGE_SIZE="+dpb.getArgumentAsInt(DatabaseParameterBuffer.PAGE_SIZE));


      org.firebirdsql.gds.GDS gdso = org.firebirdsql.gds.GDSObjectFactory.createJavaGDSImpl();
      // Factory method to create a new IscDbHandle instance specific to the implementation of this interface.
      IscDbHandle dh =  gdso.createIscDbHandle();
      System.out.println("dh="+dh);  // OK, like this: dh=org.firebirdsql.gds.impl.wire.isc_db_handle_impl@13e8d89  

       // why NPE ?? --> System.out.println(dh.getVersion()); 
       // why zero ?? --> System.out.println(dh.getDialect());
      // why NPE ?? --> System.out.println(dh.getVersion()); 

// здесь тоже вылезет NPE, но я вообще не понял, какой тут надо буфер указывать и какого размера должен быть 
// byte[]-массив dbstat - в левой части от вызова
//      byte[] dbstat = {0,0,0,0};
//      byte[] items = {  ISCConstants.isc_info_reads,
//                        ISCConstants.isc_info_writes,
//                        ISCConstants.isc_info_fetches,
//                        ISCConstants.isc_info_marks};
//      dbstat=gdso.iscDatabaseInfo(dh, items, 32760);

      //  http://www.firebirdsql.org/file/documentation/drivers_documentation/java/2.2.3/docs/org/firebirdsql/gds/ISCConstants.html 
      // byte[]	iscDatabaseInfo(IscDbHandle dbHandle, byte[] items, int bufferLength)

      // At this point, there is no implicit driver instance
      // registered with the driver manager!
      System.out.println ("got connection");
      c.close ();
    }
    catch (java.sql.SQLException e) {
                e.printStackTrace();
      System.out.println ("sql exception: " + e.getMessage ());
    }
  }
}

...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493670
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Уже лучше, но всё еще очень плохо" ((С) арм.)

Запустил ФБ как SuperServer (в режиме приложения: fbserver -a), открыл isql, ввёл там "долгий тяжкий инсерт".
Запускаю далее вот это, несколько раз:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
// compile: javac -cp .;jaybird-full-2.2.3.jar FbGatherStatistics.java
// run:     java -cp .;jaybird-full-2.2.3.jar FbGatherStatistics 1>FbGatherStatistics.log 2>FbGatherStatistics.err

import org.firebirdsql.gds.*;
public final class FbGatherStatistics
{
  private static final String DB_URL="localhost/3253:C:/1INSTALL/FIREBIRD/FB25SNAP/T0.FDB ";
  private static final String DB_USER="sysdba";
  private static final String DB_PSWD="masterke";
  static public void main (String args[]) throws Exception
  {
    try {

      org.firebirdsql.gds.GDS gdso = org.firebirdsql.gds.GDSObjectFactory.createJavaGDSImpl();
      // Factory method to create a new IscDbHandle instance specific to the implementation of this interface.
      IscDbHandle dh =  gdso.createIscDbHandle();

      DatabaseParameterBuffer dpb = gdso.createDatabaseParameterBuffer();
      dpb.addArgument(DatabaseParameterBuffer.USER, DB_USER);
      dpb.addArgument(DatabaseParameterBuffer.PASSWORD, DB_PSWD);
      System.out.println("dpb="+dpb);

      gdso.iscAttachDatabase(DB_URL, dh, dpb);

      byte[] dbstat;
      byte[] items = {  ISCConstants.isc_info_insert_count,
                        ISCConstants.isc_info_reads,
                        ISCConstants.isc_info_writes,
                        ISCConstants.isc_info_fetches,
                        ISCConstants.isc_info_marks,
                        ISCConstants.isc_info_end,
                    };
      dbstat=gdso.iscDatabaseInfo(dh, items, 32760);
      System.out.println(dbstat.length);
      for(int i=0;i<dbstat.length;i++) {
          byte item=dbstat[i];
          switch(item) {
            case ISCConstants.isc_info_insert_count:
                System.out.println("insert_count="+dbstat[i]); break;
            case ISCConstants.isc_info_reads:
                System.out.println("reads_count="+dbstat[i]); break;
            case ISCConstants.isc_info_writes:
                System.out.println("writes_count="+dbstat[i]); break;
            case ISCConstants.isc_info_fetches:
                System.out.println("fetches_count="+dbstat[i]); break;
            case ISCConstants.isc_info_marks:
                System.out.println("marks_count="+dbstat[i]); break;
            default:
                break;
          }
      }


      //for(int i=0;i<=items.length;i++) System.out.println(dbstat[i]);
      //for(int i=0;i<=items.length;i++) System.out.println(dbstat[items[i]]);
//      System.out.println(ISCConstants.isc_info_insert_count);
//      int i=0;
//      System.out.println("ISCConstants.isc_info_end="+ISCConstants.isc_info_end);
//      while( dbstat[i] != ISCConstants.isc_info_end ) {
//          System.out.println(dbstat[i]);
//          i++;
//      }

      // http://www.firebirdsql.org/file/documentation/drivers_documentation/java/2.2.3/docs/org/firebirdsql/gds/ISCConstants.html
      // byte[]	iscDatabaseInfo(IscDbHandle dbHandle, byte[] items, int bufferLength)

      System.out.println ("got connection");
      gdso.iscDetachDatabase(dh);
    }
    catch (Exception e) {
        e.printStackTrace();
    }
  }
}


- а он выдаёт мне одни и те же значения счетчиков:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
dpb=org.firebirdsql.gds.impl.wire.DatabaseParameterBufferImp@a956ac07
32
insert_count=25
reads_count=5
writes_count=6
fetches_count=7
reads_count=5
marks_count=8
got connection

Нутром чую, что добыча где-то близко. Дайте заключительного пинка в сторону истины, плз.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493688
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЗапустил ФБ как SuperServer (в режиме приложения: fbserver -a)
ты классик запустил, SuperServer это fbserver -a -m
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493801
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид
Код: sql
1.
2.
3.
4.
5.
for(int i=0;i<dbstat.length;i++) {
          byte item=dbstat[i];
          switch(item) {
            case ISCConstants.isc_info_insert_count:
                System.out.println("insert_count="+dbstat[i]); break;


Кто тебя учил так читать содержимое буфера ? Сам знаю, что никто
Но если уж ты до констант докопался, то мог бы и прочитать в доке, как данные получить.

Чти API Guide, p.52: Requesting buffer items and result buffer values
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493803
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrТаблоидЗапустил ФБ как SuperServer (в режиме приложения: fbserver -a)
ты классик запустил, SuperServer это fbserver -a -mЕсли fbserver, то таки это SS 2.5 и ключ -a
А вот если 3-ка, то firebird и ключи -a -m
:)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493804
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидЯ уже там был. Не взлетает ни хрена!Конечно ни хрена, аттачиться-то надо :)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38493813
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

упс :-)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494336
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladКто тебя учил так читать содержимое буфера ? Сам знаю, что никто Да, это я сам так научился. Ночером уже :-)
hvladНо если уж ты до констант докопался, то мог бы и прочитать в доке, как данные получить.

Чти API Guide, p.52: Requesting buffer items and result buffer valuesВидел этот пункт, но вчитываться было в лом. Подумкал, что с наскоку получится, по принципу 'by example' (там ниже пример есть).
В общем, спс! Получилось. Работающий пример кода вытащу сюда попозжее, тут подшлифовать надо его.

ВОПРОС, кстати! Какой размер буфера указывать-то ? Я тут поизгаляться слегка решил и указал ноль (dbstat=gdso.iscDatabaseInfo(dh, items, 0);) и... сервак положил:
Код: plaintext
1.
CSMIRROR (Client)       Mon Dec 09 16:32:33 2013
        "C:\1Install\FIREBIRD_2_5\bin\fbserver.exe": terminated abnormally (4294967295)

Сборка, правда, еще от 23.07.2013: WI-V2.5.3.26682 Firebird 2.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494371
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКакой размер буфера указывать-то ?
если ты берешь только ту информацию, про которую спрашиваешь, то можешь взять с избытком в 1.5-2 раза.
При получении database_info если информация в заданный буфер не влазит, то возвращается ошибка,
и нужно переаллокировать буфер большего размера.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494388
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvесли информация в заданный буфер не влазит, то возвращается ошибка, и нужно переаллокировать буфер большего размера.ну, вот я ему буфер нулевого размера выслал, он и скрючился. Происходит это, КМК, только когда кроме моего jaybird-коннекта к базе (или вообще к этому хосту ?) больше ничего не приаттачено.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494401
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

буфер нулевого размера - это совсем из ряда вон :-)
Поскольку JayBird сам шлет данные в ФБ, без "клиента", то либо он виноват, либо в ФБ нет "защиты" от дурацких параметров.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494435
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКакой размер буфера указывать-то ?Ну ты доку прочитал ? 1+2+4 сложить можешь ? А 1+2+8 ? А на N умножить ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494465
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидКакой размер буфера указывать-то ?Ну ты доку прочитал ? 1+2+4 сложить можешь ? А 1+2+8 ? А на N умножить ?Читал, только удивился зело: неудобно же! подсчитывать число параметров, думать про их размер и складывать это всё, чтобы в память влезло... %-)
Трудно им было ArrayList(Byte) сбацать, что ле... Ну да ладно.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494486
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так. В общем, коряво, но влзетело:
JayBird: isc_database_info() usage sample
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
// compile: javac -cp .;jaybird-full-2.2.4.jar FbGatherStatistics.java
// run:     java -cp .;jaybird-full-2.2.4.jar FbGatherStatistics 1>FbGatherStatistics.log 2>FbGatherStatistics.err
import static java.lang.System.*;
import java.text.*;
import org.firebirdsql.gds.*;
public final class FbGatherStatistics
{
  private static DateFormat df = new SimpleDateFormat("HH:mm:ss.SSS");
  //private static final String DB_URL="192.168.0.201/3252:empty25";
  private static final String DB_URL="192.168.0.220/3330:idx_test";
  private static final String DB_USER="sysdba";
  private static final String DB_PSWD="masterke";
  static public void main (String args[]) throws Exception
  {
    try {

      org.firebirdsql.gds.GDS gdso = org.firebirdsql.gds.GDSObjectFactory.createJavaGDSImpl();
      // Factory method to create a new IscDbHandle instance specific to the implementation of this interface.
      IscDbHandle dh =  gdso.createIscDbHandle();

      DatabaseParameterBuffer dpb = gdso.createDatabaseParameterBuffer();
      dpb.addArgument(DatabaseParameterBuffer.USER, DB_USER);
      dpb.addArgument(DatabaseParameterBuffer.PASSWORD, DB_PSWD);
      dpb.addArgument(DatabaseParameterBuffer.CONNECT_TIMEOUT, 2000);
      //out.println("dpb="+dpb); org.firebirdsql.gds.impl.wire.DatabaseParameterBufferImp@a956ac07

      out.println( df.format( System.currentTimeMillis() )+ " trying to attach. . .");
      gdso.iscAttachDatabase(DB_URL, dh, dpb);
      out.println( df.format( System.currentTimeMillis() )+" attached to "+DB_URL);

      byte[] dbstat;
      byte[] items = {  ISCConstants.isc_info_reads,
                        ISCConstants.isc_info_writes,
                        ISCConstants.isc_info_fetches,
                        ISCConstants.isc_info_marks,
                        ISCConstants.isc_info_end,
                    };
      
      while(true) {
        try {  
            out.println(df.format( System.currentTimeMillis() )+" trying to gather db statistics. . .");
            dbstat=gdso.iscDatabaseInfo(dh, items, 128);
            out.println(df.format( System.currentTimeMillis() )+" statistics gathered, dbstat[] length="+dbstat.length);
            //out.println(dbstat.length);
            int i=0;
            boolean f;
            while( dbstat[i]!=ISCConstants.isc_info_end) { 
                // API guide: A one-byte item return type. 
                // There are compile-time constants defined for all the item return
                // types in ibase.h (inf_pub.h ?)
                byte item=dbstat[i++];
                // API guide:  A two-byte number specifying the number of bytes that 
                // follow in the remainder of the cluster.          
                int len = gdso.iscVaxInteger(dbstat, i, 2);
                i+=2;
                f=false;
                switch (item){
                  case ISCConstants.isc_info_reads: 
                      out.print("\t\treads  :");
                      f=true;
                      break;
                  case ISCConstants.isc_info_writes:
                      out.print("\t\twrites :");
                      f=true;
                      break;

                  case ISCConstants.isc_info_fetches: 
                      out.print("\t\tfetches:");
                      f=true;
                      break;
                  case ISCConstants.isc_info_marks:
                      out.print("\t\tmarks  :");
                      f=true;
                      break;
                  default:
                      break;
                }
                if (f)
                  out.println(String.format("%18d",gdso.iscVaxInteger(dbstat, i, 2)));
                i+=len;
            }
            Thread.sleep(5000);
        } catch (GDSException e)   {
            break;
        }
      }

      out.println (df.format( System.currentTimeMillis() )+" detaching from database. . .");
      gdso.iscDetachDatabase(dh);
      out.println (df.format( System.currentTimeMillis() )+" detached.");
    }
    catch (GDSException e) {
        out.println(df.format( System.currentTimeMillis() )+" EXCEPTION: SQLSTATE="+e.getSQLState()+", fb_error="+e.getFbErrorCode()+", msg="+e.getMessage());
        //e.printStackTrace();
    }
  }
}


В нём жестко прошита база, порт, усер+пароль и интервал опроса (5 сек).
Запустил я его с логированием:
Код: plaintext
java -cp .;jaybird-full-2.2.4.jar FbGatherStatistics | mtee FbGatherStatistics.log

И вижу, товарисчи, форменный бред.

Как на СуперСервере для базы, в которую сейчас 200 isql-молотилок лупят инсерты, могут быть вот такие напопительные счётчики (полный лог - в аттаче):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
17:58:29.896 trying to attach. . .
17:58:30.021 attached to 192.168.0.220/3330:idx_test
17:58:30.021 trying to gather db statistics. . .
17:58:30.021 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             24115
		fetches:             24705
		marks  :              9749
17:58:35.021 trying to gather db statistics. . .
17:58:35.021 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             24900
		fetches:              1569
		marks  :             30928
. . .
17:58:55.037 trying to gather db statistics. . .
17:58:55.037 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             28782
		fetches:              3529
		marks  :             14562
. . .
17:59:15.037 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             32245
		fetches:              1741
		marks  :             54524
17:59:20.052 trying to gather db statistics. . .
17:59:20.052 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             33430
		fetches:             14672
		marks  :             31130
. . .
18:01:10.068 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             52948
		fetches:             24564
		marks  :             31217
18:01:15.068 trying to gather db statistics. . .
18:01:15.068 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :             54139
		fetches:             61381
		marks  :              7841


PS. Изменённые параметры конфига:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
$ grep "^[^#;]" /opt/fb30/firebird.conf|sort
AuthClient = Legacy_Auth,Srp,Win_Sspi
AuthServer = Legacy_Auth,Srp
BugcheckAbort = 1
DefaultDbCachePages = 512K
ExternalFileAccess = Restrict /var/db/fb30
FileSystemCacheThreshold = 1024K
RemoteServicePort = 3330
UserManager = Legacy_UserManager
WireCrypt = Disabled
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494513
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
гы... приятная штука, java эта: скопировал .jar + сырец на линух, заменил разделитель ";" на ":" - и вперёд, с песней. Никаких танцев с разрядностью, совместимостью и прочей хренотой :-)
Вот только счетчики всё равно бредят %-/
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
$ javac -cp .:jaybird-full-2.2.4.jar FbGatherStatistics.java
$ java -cp .:jaybird-full-2.2.4.jar FbGatherStatistics
18:28:22.525 trying to attach. . .
18:28:22.886 attached to 192.168.0.220/3330:idx_test
18:28:22.887 trying to gather db statistics. . .
18:28:22.887 statistics gathered, dbstat[] length=33
                reads  :               171
                writes :             64067
                fetches:             41136
                marks  :             34040
18:28:27.897 trying to gather db statistics. . .
18:28:27.898 statistics gathered, dbstat[] length=33
                reads  :               171
                writes :             64925
                fetches:             46938
                marks  :             59025
18:28:32.898 trying to gather db statistics. . .
18:28:32.899 statistics gathered, dbstat[] length=33
                reads  :               171
                writes :                77
                fetches:             41428
                marks  :             14384
18:28:37.900 trying to gather db statistics. . .
18:28:37.902 statistics gathered, dbstat[] length=33
                reads  :               171
                writes :               998
                fetches:             28525
                marks  :             40004
18:28:42.903 trying to gather db statistics. . .
18:28:42.903 statistics gathered, dbstat[] length=33
                reads  :               171
                writes :              1874
                fetches:             15967
                marks  :              1356
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494518
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид И вижу, товарисчи, форменный бред. Ну, как написал, то и видишь :)
Читай документацию. Глазами. Внимательно. Там пример есть.

Ошибка сразу после тела switch
...
Рейтинг: 0 / 0
25 сообщений из 78, страница 1 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]