powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
78 сообщений из 78, показаны все 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
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494521
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

я думал ты мой пример на паскале посмотришь...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494523
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladОшибка сразу после тела switchТочнее, в тут
Код: sql
1.
 out.println(String.format("%18d",gdso.iscVaxInteger(dbstat, i, 2)));

где ты эту 2-ку нашёл и для чего ты перед этим len вычислял ?
Копипастер :)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494529
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

впрочем, мой пример тоже крив, поскольку я точно знаю длину значений для конкретных параметров, и не использую длину параметра. И еще, по уму, якобы нужно учитывать с какой архитектуры процессора идут integer (если integer).
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494531
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИ еще, по уму, якобы нужно учитывать с какой архитектуры процессора идут integer (если integer).Не нужно, для этого есть isc_vax_integer
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494535
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

я ее имел в виду, в коде Таблоида проглядел.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494536
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladдля этого есть isc_vax_integer
Который obsolete и заменён на isc_portable_integer().
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494548
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladhvladОшибка сразу после тела switchТочнее, в тут
Код: sql
1.
 out.println(String.format("%18d",gdso.iscVaxInteger(dbstat, i, 2)));


где ты эту 2-ку нашёл и для чего ты перед этим len вычислял ?
Копипастер :)блин, точно! копипаст с верхнего вызова :(
Влад, спасибо в очередной раз!
Версия 1.0.1, исправленная:
Код: 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.
// 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, len )));
                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());
    }
  }
}
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494549
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovhvladдля этого есть isc_vax_integer
Который obsolete и заменён на isc_portable_integer().Насчёт obsolete я бы поспорил:

Ищем раз:
Код: sql
1.
2.
3.
Find all "isc_portable_integer", Match case, Whole word, Subfolders, Find Results 1, "Entire Solution", "*.c;*.cpp;*.cxx;*.cc;*.tli;*.tlh;*.h;*.hpp;*.hxx;*.hh;*.inl;*.rc;*.resx;*.idl;*.asm;*.inc;*.sql;*.epp"
...
Matching lines: 38    Matching files: 35    Total files searched: 1820



Ищем два:
Код: sql
1.
2.
3.
Find all "isc_vax_integer", Match case, Whole word, Subfolders, Find Results 2, "Entire Solution", "*.c;*.cpp;*.cxx;*.cc;*.tli;*.tlh;*.h;*.hpp;*.hxx;*.hh;*.inl;*.rc;*.resx;*.idl;*.asm;*.inc;*.sql;*.epp"
...
Matching lines: 149    Matching files: 43    Total files searched: 1820


Но пользоваться, конечно, лучше isc_portable_integer, ибо только он может работать с 8-ми байтными числами
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494551
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНо пользоваться, конечно, лучше isc_portable_integer, ибо только он может
работать с 8-ми байтными числами
Которыми эти счётчики, по идее, и должны бы являться. Во избежание переполнения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494553
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvя думал ты мой пример на паскале посмотришь...зачем ? я в нём всё равно ничего не пойму %-)
Да и многословный он, паскаль этот: begin ... end - что, нельзя было "{" и "}", как в си ?
ЗЫ. "круче" него только html: чтобы затолкать фразу в комментарий, надо вбить семь символов, причем три из них - с нажатым Shift'ом: <!-- тратата -->

Это ж каким ботаником надо было быть, чтобы придумать такое....
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494554
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovКоторыми эти счётчики, по идее, и должны бы являться. Во избежание переполнения.ога...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
19:14:38.021 trying to attach. . .
19:14:38.193 attached to 192.168.0.220/3330:idx_test
19:14:38.193 trying to gather db statistics. . .
19:14:38.193 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :           2288335
		fetches:       -1927992252
		marks  :          65169859
19:14:43.193 trying to gather db statistics. . .
19:14:43.193 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :           2288580
		fetches:       -1916455014
		marks  :          65176854
19:14:48.193 trying to gather db statistics. . .
19:14:48.193 statistics gathered, dbstat[] length=33
		reads  :               171
		writes :           2289151
		fetches:       -1904960438
		marks  :          65191330
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494559
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпользоваться, конечно, лучше isc_portable_integer, ибо только он может работать с 8-ми байтными числамия не вижу этой функции (ни в сырцах JayBird'а , ни в доке - нигде). Это так и должно быть ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494560
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

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

APIGuide, p.379

Насчёт JayBird - пиши трекеру или в саппорт лист, думаю Марк быстро её добавит.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494576
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladAPIGuide, p.379А что там относящегося к isc_portable_integer ? (см скрин в аттаче)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494579
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladНасчёт JayBird - пиши трекеру или в саппорт лист, думаю Марк быстро её добавит.Напишу, наверное. BTW: а Роман Рокитский - он тоже ведёт разработку или уже нет ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494582
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

понятия не имею, в куда ты смотришь
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494584
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидРоман Рокитский - он тоже ведёт разработку или уже нет ?Он передал свои полномочия Марку.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494608
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпонятия не имею, в куда ты смотришья смотрю в "APIGuide, p.379" - как ты и написал выше. Что там относится к обсуждаемым тут вопросам ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494610
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидя смотрю в "APIGuide,
К какой версии у тебя гайд и откуда ты его взял?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494623
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovК какой версии у тебя гайд и откуда ты его взял?как это "какой" и "откуда" ?...
ОТТУДА!
Код: plaintext
24.11.1999  06:00            3 579 077 ApiGuide.pdf
Можно подумать, что есть еще что-то...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494680
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Версия 1.0.1.1: убрал нахрен switch (заменил поиском в hashmap'e, чтобы поуниверсальнее было), а также добавил главное: вывод РАЗНОСТЕЙ значений счетчиков:
Код: 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.
21:36:40.037 trying to attach. . .
21:36:40.209 attached to 192.168.0.220/3330:idx_test
21:36:40.209 trying to gather db statistics. . .
21:36:40.209 statistics gathered, dbstat[] length=33
21:36:40.209            reads                    0; diff:                 -1
21:36:40.209            writes                   0; diff:                 -1
21:36:40.209            fetches                  0; diff:                 -1
21:36:40.209            marks                    0; diff:                 -1

21:36:45.209 trying to gather db statistics. . .
21:36:45.209 statistics gathered, dbstat[] length=33
21:36:45.209            reads                  225; diff:                  0
21:36:45.209            writes             3197215; diff:                790
21:36:45.209            fetches          552716269; diff:           11447955
21:36:45.209            marks             92552294; diff:              25592

21:36:50.209 trying to gather db statistics. . .
21:36:50.209 statistics gathered, dbstat[] length=33
21:36:50.209            reads                  225; diff:                  0
21:36:50.209            writes             3198005; diff:                174
21:36:50.209            fetches          564164224; diff:           11572423
21:36:50.209            marks             92577886; diff:               2950

21:36:55.209 trying to gather db statistics. . .
21:36:55.209 statistics gathered, dbstat[] length=33
21:36:55.209            reads                  225; diff:                  0
21:36:55.209            writes             3198179; diff:                623
21:36:55.209            fetches          575736647; diff:           11444395
21:36:55.209            marks             92580836; diff:              25262
. . .

Дальше надо будет наворачивать плюшки: добавить реакцию на входные аргументы (имя хоста/номер_порта/путь_к_базе, время задержки между замерами etc).

.java-файлик - в аттаче.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494689
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladпиши трекеру или в саппорт лист, думаю Марк быстро её добавит. Запулил . Будем подождать, что скажет пистолет Шона Коннери.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494710
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

с чего ты взял, что оно имеет отношение к services api ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494717
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladс чего ты взял, что оно имеет отношение к services api ?Ну, померещилось вот.... что-то... :-[
А к чему еще-то ? %-)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494723
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидА к чему еще-то ?А что ещё ты знаешь ?
А в каком разделе API Guide ты видел isc_database_info ? А isc_vax _integer ?
А накой писать абы шо в приличном месте ? :)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494725
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидDimitry SibiryakovК какой версии у тебя гайд и откуда ты его взял?как это "какой" и "откуда" ?...
ОТТУДА!
Код: plaintext
24.11.1999  06:00            3 579 077 ApiGuide.pdf
Можно подумать, что есть еще что-то...Это какая-то муйня (c) kdv 1999 года, наверняка от пре-релиза ib6
Ибо у всех, кому надо, есть другая муйня от 2001 года :) Под тем же названием.
И не спрашивай, где я её взял - не знаю...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494726
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидА к чему еще-то ?А что ещё ты знаешь ?
А в каком разделе API Guide ты видел isc_database_info ? А isc_vax _integer ?
А накой писать абы шо в приличном месте ? :)ну... увидел в названии пдфника:*API* - и там, в трекере, список выбора тоже знакомые буквы содержал в одном из пунктов... я и ткнул... :-[

А чего ты про трекер так переживаешь ? Он же всё стерпит, да и Шон там начеку, особливо по мою душу...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494727
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидА чего ты про трекер так переживаешь ?Мне за тебя перед ним стыдно...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494728
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladИбо у всех, кому надо, есть другая муйня от 2001 года :) Под тем же названием.
И не спрашивай, где я её взял - не знаю...а вышли, плз, в личку, ы ? я так думаю, что пока kdv там обновит у себя, время какое-то совсем ненулевое пройдёт...
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494731
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494735
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидА чего ты про трекер так переживаешь ?Мне за тебя перед ним стыдно...У мну с аглицким плохо, а точнее - беда. Поэтому пишу туда на крымско-татарском, только в латинницу перевожу. А Шон всё расставляет на свои места
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494736
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТаблоид,

http://www.ibphoenix.com/files/60ApiGuide.zip

Хотя это тоже 1999 года. А вообще если есть более свежая дока то почему она не выложена на официальном сайте FB?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494740
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис http://www.ibphoenix.com/files/60ApiGuide.zip дык спасибо, но... там тоже самое, хит-1999:
Код: plaintext
2.11.1999  17:04            3 579 077 ApiGuide.pdf
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494747
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
0xFF. я забыл что-то... или же новая java-мерялка опять врёт...
откудова могут быть в insert_only-тесте сумасшедшие фетчи: 11.4 млн против 5..15 тыс "марок", интервал замеров = 5 сек (число молотилок = 200, каждая делает в среднем 55 вставок):

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
22:50:36.271 trying to gather db statistics. . .
22:50:36.271 statistics gathered, dbstat[] length=33
22:50:36.271            reads                  241; diff:                  0
22:50:36.271            writes             3614655; diff:                703
22:50:36.271            fetches        -2118357188; diff:           11476403
22:50:36.271            marks            104009415; diff:              21165

22:50:41.271 trying to gather db statistics. . .
22:50:41.271 statistics gathered, dbstat[] length=33
22:50:41.271            reads                  241; diff:                  0
22:50:41.271            writes             3615358; diff:                263
22:50:41.271            fetches        -2106880785; diff:           11549457
22:50:41.271            marks            104030580; diff:               4749

22:50:46.271 trying to gather db statistics. . .
22:50:46.271 statistics gathered, dbstat[] length=33
22:50:46.271            reads                  241; diff:                  0
22:50:46.271            writes             3615621; diff:                490
22:50:46.271            fetches        -2095331328; diff:           11565988
22:50:46.271            marks            104035329; diff:              14400

- ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494778
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисА вообще если есть более свежая дока то почему она не выложена на
официальном сайте FB?
Потому что эта более свежая - частная собственность компании Эмбаркадеро и лежать на чужом
сайте ей впадлу. С другой стороны, с сайта самого Эмбаркадера её можно скачать без особых
проблем.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494836
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидя так думаю, что пока kdv там обновит у себя
см. ниже.

ТаблоидЭто какая-то муйня (c) kdv 1999 года, наверняка от пре-релиза ib6
Ибо у всех, кому надо, есть другая муйня от 2001 года :) Под тем же названием.
И не спрашивай, где я её взял - не знаю...
муйня от 1999 является единственным вариантом доки, который раздавался невозбранно. Вся остальная дока на InterBase принадлежит дистрибутиву InterBase, который без проблем скачивается с embarcadero.com.
У меня на компе есть установленные 7.1, 7.5, 2007, 2009, XE, XE3, и во всех есть дока, но это не значит, что я имею право ее выкладывать к себе на сайт.

isc_portable_integer я вижу в доке от 7.1. От платных 6.0 или 6.5 я себе доку не ставил.

Рядом с упоминанием доки от бесплатной IB 6.0 могу разве что воткнуть на свободно лежащую доку от более свежих версий.
http://docs.embarcadero.com/products/interbase/
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494840
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, у меня там и дока по ИБ 6.5 есть. в ней уже isc_portable_integer есть.
частично раздел переделал, могу вообще доку по 6.0 слить в один файл.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38494965
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvкстати, у меня там и дока по ИБ 6.5 есть. в ней уже isc_portable_integer есть.Нашёл, псип. Поменяй, плз, название зипа: http://www.ibase.ru/v6/ib65_docs_for_delphi.zip - там (внутри архива) на самом деле нет ничего внутри папки ib65_docs_for_delphi, зато в остальных всё пучком :-)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38495097
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидПоменяй, плз, название зипа: http://www.ibase.ru/v6/ib65_docs_for_delphi.zip - там (внутри архива) на самом деле нет ничего внутри папки
зачем мне его менять, если он так и назывался? Это файл из апдейта Delphi 7. Каким он был, таким я его и выложил. А zip мне перепаковывать нечем, у меня винзип не куплен :-)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38495186
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvА zip мне перепаковывать нечем, у меня винзип не куплен :-)7z
GPL и паковать в зип умеет, и глупого ограничения в виде приставки "вин" не имеет.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38495279
Esperito
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvА zip мне перепаковывать нечем, у меня винзип не куплен :-)А купленная винда XP или выше еззь? :-)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38495299
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EsperitoА купленная винда XP или выше еззь? :-)
есть, я забыл что вин7 сама в зип может паковать. Тем не менее, архив оригинальный, менять не буду.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496250
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Продолжаем углублять реформы" ((С) Черномырдин ?)

Настал черёд получать счетчики, объединённых под общим названием "Database operation counts" (IR, NIR, inserts et al).
Согласно API Guide, 2001-го года, странице 56:
стр. 56 Database operation counts
Several information items are provided for determining the number of various database
operations performed by the currently attached calling program. These values are
calculated on a per-table basis .
When any of these information items is requested, InterBase returns to the result buffer:
* 1 byte specifying the item type (for example, isc_info_insert_count).
* 2 bytes telling how many bytes compose the subsequent value pairs.
* A pair of values for each table in the database on which the requested type of operation
has occurred since the database was last attached.
Each pair consists of:
* 2 bytes specifying the table ID.
* 4 bytes listing the number of operations (for example, inserts) done on that table.
To determine an actual table name from a table ID, query the system table, RDB$RELATION

я решил сразу затолкать пары {relation_id, relation_name} в мап-структуру, чтобы не заморачиваться с вытаскиванием имени таблицы по её ИДшнику. И заполняю этот мап вот так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
      Map<Integer, String> tabs = new TreeMap<Integer, String>();
      Statement stmt = c.createStatement();
      String tqry="select rdb$relation_id, trim(rdb$relation_name) from rdb$relations"; // where coalesce(rdb$system_flag,0)=0";
      ResultSet rs = stmt.executeQuery(tqry); // smallint; chhar(31)
      while(rs.next()) {
          tabs.put(rs.getInt(1), rs.getString(2));
          //System.out.println("a1 = " + rs.getString(1) + ", a2 = " + rs.getString(2));
      }    
      stmt.close();
      System.out.println("tabs.size()="+tabs.size()+"; tabs="+tabs);

И далее, получая ИДшник таблицы в первых двух байтах , лезу в мап за её именем.

Ну так вот: проблема в том, что статистика счетчиков операций показывается только по двум таблицам: RDB$RELATIONS и RDB$DATABASE . Несмотря на то, что в другом окошке интенсивно прёт селект из 100500 млн строк с других таблиц:-(
Более того, з начения счетчиков по этим двум таблицам равны всё время единице.

В нижеприведенном коде явно трабл в куске, выделенном цветом. Но понять, чего там не так, я не смог.

Хелп, плз, кто тут силён API Guid'e! (ну, а в java-коде - верю, все сильны :))

Код: 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.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
// 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 java.io.*;
import static java.lang.System.*;
import java.sql.*;
import java.text.*;
import java.util.*;
import org.firebirdsql.gds.*;
import org.firebirdsql.pool.*;


public final class FbGatherStatistics
{
  private static enum CounterType { PERF, DBOP, DUMMY }
  
  private static BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in));
  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
  {
    // todo: use args for: db_name, db_user, db_password, sleep_delay  
    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( df.format( System.currentTimeMillis() )+ " trying to attach. . .");
      gdso.iscAttachDatabase(DB_URL, dh, dpb);
      out.println( df.format( System.currentTimeMillis() )+" attached to "+DB_URL);
      //stdin.readLine();         
      
      // strange but... need 2nd attach ?! could not find 'chain' between GDS object and Connection interface :((
      out.println( df.format( System.currentTimeMillis() )+ " trying to attach2. . .");
      FBWrappingDataSource ds = new FBWrappingDataSource();
      ds.setDatabase(DB_URL);
      // ds.setLoginTimeout (10);
      java.sql.Connection c = ds.getConnection(DB_USER,  DB_PSWD);
      out.println( df.format( System.currentTimeMillis() )+" attached2 to "+DB_URL);
      //stdin.readLine();         
      

      Map<Integer, String> tabs = new TreeMap<Integer, String>();
      Statement stmt = c.createStatement();
      String tqry="select rdb$relation_id, trim(rdb$relation_name) from rdb$relations"; // where coalesce(rdb$system_flag,0)=0";
      ResultSet rs = stmt.executeQuery(tqry); // smallint; chhar(31)
      while(rs.next()) {
          tabs.put(rs.getInt(1), rs.getString(2));
          //System.out.println("a1 = " + rs.getString(1) + ", a2 = " + rs.getString(2));
      }    
      stmt.close();
      System.out.println("tabs.size()="+tabs.size()+"; tabs="+tabs);
      
      Map<Integer, StatValue> cntx = new LinkedHashMap<Integer, StatValue>();
      cntx.put( ISCConstants.isc_info_reads,   new StatValue(CounterType.PERF, "reads",7));
      cntx.put( ISCConstants.isc_info_writes,  new StatValue(CounterType.PERF, "writes",7));
      cntx.put( ISCConstants.isc_info_fetches, new StatValue(CounterType.PERF, "fetches",7));
      cntx.put( ISCConstants.isc_info_marks,   new StatValue(CounterType.PERF, "marks",7));

      // add 10.12.2013: database operations counters
      cntx.put( ISCConstants.isc_info_read_idx_count, new StatValue(CounterType.DBOP, "idxReads",8));
      cntx.put( ISCConstants.isc_info_read_seq_count, new StatValue(CounterType.DBOP, "natReads",8));
      cntx.put( ISCConstants.isc_info_insert_count,   new StatValue(CounterType.DBOP, "inserts", 8));
      cntx.put( ISCConstants.isc_info_insert_count,   new StatValue(CounterType.DBOP, "inserts", 8));
      cntx.put( ISCConstants.isc_info_update_count,   new StatValue(CounterType.DBOP, "updates", 8));
      cntx.put( ISCConstants.isc_info_delete_count,   new StatValue(CounterType.DBOP, "deletes", 8));
      cntx.put( ISCConstants.isc_info_backout_count,  new StatValue(CounterType.DBOP, "backouts",8));
      cntx.put( ISCConstants.isc_info_purge_count,    new StatValue(CounterType.DBOP, "purges",  8));
      cntx.put( ISCConstants.isc_info_expunge_count,  new StatValue(CounterType.DBOP, "expunges",8));

      cntx.put( ISCConstants.isc_info_end,     new StatValue(CounterType.DUMMY, "end"));
      
      byte[] items = new byte[ cntx.size() ];
      int ii=0, buf_total=2;
      for(Integer k : cntx.keySet()) {
         items[ii++] = k.byteValue();
         buf_total += 8;
      }
      //System.out.println(cntx);
      //System.out.println("buf_total="+buf_total);
      
      int len;
      byte item;
      short i;
      byte[] dbstat; // stores result values of counters
      int prevVal, currVal, tabsIdx;
      while(true) {
        try {  
            out.println(df.format( System.currentTimeMillis() )+" trying to gather db statistics. . .");
            dbstat=gdso.iscDatabaseInfo(dh, items, buf_total);
            out.print(df.format( System.currentTimeMillis() )+" statistics gathered, dbstat[] length="+dbstat.length);
            //out.println(dbstat[0]);
            String dts;
            i=0;
            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 ?)
                item=dbstat[i++];
                // API guide:  A two-byte number specifying the number of bytes that 
                // follow in the remainder of the cluster.          
                len = gdso.iscVaxInteger(dbstat, i, 2);
                i+=2;
                dts=df.format( System.currentTimeMillis() );
                if  (cntx.containsKey( (int)item) ) {
                    if ( cntx.get((int)item).cType == CounterType.DBOP ) {
                        // API Guide, pg 56 (Database operation counts):
                        // values are calculated on a per-table basis <...>
                        // 2 bytes specifying the table ID
                        // 4 bytes listing the number of operations (for example, inserts)
                        // done on that table.

                  // WHY len > 0  only for TWO relations (RDB$DATABASE and RDB$RELATIONS)
                        if (len > 0) { // ==> len = 2+4 (rel_id, counter_value)
                            out.println();
                            tabsIdx=dbstat[i]; ///gdso.iscVaxInteger(dbstat, i, 2);
                            out.print(   dts+"\t\t"+cntx.get((int)item).title+", len="+len+", tabsIdx="+tabsIdx);
                            out.print("\trel_id="+gdso.iscVaxInteger(dbstat, i, 2));
                            out.print("\ttab_name="+tabs.get(gdso.iscVaxInteger(dbstat, i, 2)) );
                            out.print("\tcounter="+gdso.iscVaxInteger(dbstat, i+2, len-2)); // why counter value ALWAYS =1 ???
                            //out.print("\tcounter="+dbstat[i+2]+" "+dbstat[i+3]+" "+dbstat[i+4]+" "+dbstat[i+5] );
                        }
                    }
                    if ( cntx.get((int)item).cType == CounterType.PERF ) { // this case works OK
                        out.println();
                        prevVal = cntx.get((int)item).val;
                        currVal = gdso.iscVaxInteger(dbstat, i, len);

                        out.print(   dts+"\t\t"+cntx.get((int)item).title+" "
                                     +String.format( "%12d; diff: %12d", 
                                                     currVal, 
                                                     prevVal != 0 ? currVal - prevVal : -1
                                                   ) 
                                );
                        cntx.get( (int)item).val = currVal;
                    }
                }

                i+=len;
            }
            out.println("\n");
exit(0);            
            Thread.sleep(5000);

        } catch (GDSException e)   {
            break;
        }
      } // while (true)

      out.println ("\n"+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());
    }
    catch (SQLException e) {
        e.printStackTrace();
        out.println ("sql exception: " + e.getMessage ());
    }    
  }
  
  static class StatValue {
      //int isc_const;
      final String title;
      final CounterType cType;
      int val=0;
      
      StatValue(CounterType c, String s) { title=s; cType = c; }
      StatValue(CounterType c, String s, int rPad) { title=String.format("%1$-" + rPad + "s", s); cType = c; }
      
      @Override
      public String toString() { return title; }
      // contract for Map or Set:
      @Override
      public boolean equals(Object o) {
          return (o instanceof StatValue)
                  && ((StatValue)o).title.equalsIgnoreCase(title);
      }
     
      @Override
      public int hashCode() {
          return title.hashCode();
      }
  }
}
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496262
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоид,

по-моему ты ерундой занимаешься. Возьми ОДНУ таблицу, получи буфер под свои запрошенные счетчики, и посмотри на БАЙТЫ в соответствии с возвращаемыми данными, что и где. Разберись, как идут параметры, номер таблицы, счетчики и прочее.
Потом возьми ДВЕ таблицы, проделай то же самое.
Потом, на основании полученной информации, будешь уже писать код и выводить его в правильном порядке.

Причем, все это надо было бы делать в монопольном режиме, а не в молотилке. Хотя, при молотилке можно было бы снять буфер два раза, и найти "статические" байты при двух снимках буфера за разное время.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496506
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВозьми ОДНУ таблицу, получи буфер под свои запрошенные счетчики, и посмотри на БАЙТЫ в соответствии с возвращаемыми данными, что и где. Вот вызов: iscDatabaseInfo(dh, items, buf_total) - как ему указать вернуть данные только для ОДНОЙ (той, что я выбрал) таблицы ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496523
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Таблоидкак ему указать вернуть данные только для ОДНОЙ (той, что я выбрал) таблицы ?
никак, он всегда возвращает счетчики для всех таблиц (с которыми была данная операция)
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496557
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
похоже, у нас в 2.5 и выше бага с возвратом больших счетчиков через isc_database_info :-(
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38496893
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrпохоже, у нас в 2.5 и выше бага с возвратом больших счетчиков через isc_database_info :-(Не понял я что-то. Как значения счетчиков получает, например, трейс - не через isc_database_info ?
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38497036
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидВ нижеприведенном коде явно трабл в куске, выделенном цветом. Но понять, чего там не так, я не смог.Там сплошной трабл. Писать код за тебя я не буду, скажу только, что для потабличных счётчиков (которые ты обозвал CounterType.DBOP) верно следующее:
а) указывается суммарная длина последующего массива пар {rel_id, value}, т.е. чтобы понять сколько элементов в массиве, нужно разделить её на 6
б) эти счётчики не являются суммарными для всех коннектов и накапливаются только для текущего коннекта (независимо от SS\CS\SC)
в) в 2.5 эти счётчики 4-х байтные, поэтому могут переполняться (теоритически, на практике - нужно оооочень постараться, ибо см. (б))
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38497043
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ТаблоидКак значения счетчиков получает, например, трейс - не через isc_database_info ?Он их берёт из того же места, но без участия isc_database_info
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38497177
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladТаблоидВ нижеприведенном коде явно трабл в куске, выделенном цветом. Но понять, чего там не так, я не смог.Там сплошной трабл. Писать код за тебя я не буду, скажу только, что для потабличных счётчиков (которые ты обозвал CounterType.DBOP) верно следующее:
а) указывается суммарная длина последующего массива пар {rel_id, value}, т.е. чтобы понять сколько элементов в массиве, нужно разделить её на 6
б) эти счётчики не являются суммарными для всех коннектов и накапливаются только для текущего коннекта (независимо от SS\CS\SC)
в) в 2.5 эти счётчики 4-х байтные, поэтому могут переполняться (теоритически, на практике - нужно оооочень постараться, ибо см. (б))псип, буду дальше ковырять.
...
Рейтинг: 0 / 0
JayBird 2.2.3: как им вызвать аналог isc_database_info() ?
    #38497243
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladб) эти счётчики не являются суммарными для всех коннектов и накапливаются только для текущего коннекта (независимо от SS\CS\SC)&@#%@$&@%!
Где были мои глаза, когда я читал вчера еще:API Guide, page 56 >> Database operation counts
Several information items are provided for determining the number of various database
operations performed by the currently attached calling program. These values are
calculated on a per-table basis.
И тогда... накой хрен они мне такие ?! я же мониторить собрался за другими коннектами, а не за собой...

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


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