Subject | Transactions : about OIT, OAT, OST, NEXT |
---|---|
Author | |
Post date | 2015-03-16T15:59:25Z |
Hello,
i have remarked a strange thing, if you do only one transaction by connection these counters are not updated , it is normal ?
i have done the test with dotnet provider and node-firebird (they uses the xdr remote protocol).
it is very easy to reproduce :
1) Open Connection
2) Open transaction
3) do a select query
4) hard commit on transact
5) Close connection
ps : if i do a second transaction on the same connection these counters are updated.
so if you do a little script that launch N times this little program you obtain with gstat -h
IF N = 100
BEFORE :
OIT 1, OAT 2, OST 2, Next 3
AFTER
OIT 1, OAT 2, OST 2, NEXT 103
[CODE => DOTNET]
using FirebirdSql.Data.FirebirdClient;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace dotnet_firebird
{
class Program
{
static void Main(string[] args)
{
FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder scnx = new FirebirdSql.Data.FirebirdClient.FbConnectionStringBuilder();
scnx.UserID = "SYSDBA";
scnx.Password = "masterkey";
scnx.DataSource = "127.0.0.1";
scnx.Database = "c:\\test.fdb";
int i = 0;
FbConnection cnx = new FbConnection(scnx.ToString());
cnx.Open();
FbTransaction tr = cnx.BeginTransaction();
FbCommand cmd = new FbCommand("SELECT COUNT(1) FROM TRANSACT", cnx, tr);
FbDataReader _reader = cmd.ExecuteReader();
while (_reader.Read())
Console.WriteLine(_reader.GetString(0));
_reader.Close();
tr.Commit();
i++;
cnx.Close();
cnx.Dispose();
}
}
}
[/CODE]
[CODE => node]
var fb = require('node-firebird');
var _connection = {
user : 'SYSDBA',
password : 'masterkey',
host : '127.0.0.1',
port : 3050,
database : 'test.fdb',
}
fb.attach(_connection, function (err, cnx) {
if (err) {
console.log("can't connect to db");
return;
}
cnx.query("SELECT count(1) FROM TRANSACT", function (err, data) {
console.log(data);
cnx.detach(function (err) {
if (err)
console.log(err);
});
});
});
[/CODE]