orientechnologies / orientdb

OrientDB is the most versatile DBMS supporting Graph, Document, Reactive, Full-Text and Geospatial models in one Multi-Model product. OrientDB can run distributed (Multi-Master), supports SQL, ACID Transactions, Full-Text indexing and Reactive Queries.
https://orientdb.dev
Apache License 2.0
4.74k stars 870 forks source link

Server still got lock after load testing #3443

Closed henryzhao81 closed 9 years ago

henryzhao81 commented 9 years ago
  1. Build source from latest source code (develop branch 2.1-SNAPSHOT),
  2. Add following handler into db configuration file : orientdb-server-config.xm:
  3. Put locktest.jar into lib directory
  4. Create Database,

DROP DATABASE plocal:../databases/pharos admin admin; CREATE DATABASE plocal:../databases/pharos admin admin plocal; connect plocal:../databases/pharos admin admin;

insert into orole (mode, name, rules) values (0, 'useradmin', {"database.function.":2,"database.class.":3,"database.class.goal":7,"database.class.tag":15,"database.class.raw":7,"database.class.orole":2,"database.class.term":15,"database":2,"database.class.group":7,"database.schema":2,"database.class.stats":7,"database.cluster.*":15,"database.class.contact":7,"database.command":2,"database.class.ouser":2,"database.hook.record":15,"database.class.config":7,"database.class.insight":15,"database.class.dosage":15,"database.class.site":7,"database.class.hours":7,"database.class.dailyStats":7,"database.class.synclog":7,"database.class.report":15,"database.class.dose":7});

Users

insert into OUser set name = 'loadtest1', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest1';

insert into OUser set name = 'loadtest2', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest2';

insert into OUser set name = 'loadtest3', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest3';

insert into OUser set name = 'loadtest4', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest4';

insert into OUser set name = 'loadtest5', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest5';

insert into OUser set name = 'loadtest6', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest6';

insert into OUser set name = 'loadtest7', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest7';

insert into OUser set name = 'loadtest8', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest8';

insert into OUser set name = 'loadtest9', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest9';

insert into OUser set name = 'loadtest10', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest10';

insert into OUser set name = 'loadtest11', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest11';

insert into OUser set name = 'loadtest12', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest12';

insert into OUser set name = 'loadtest13', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest13';

insert into OUser set name = 'loadtest14', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest14';

insert into OUser set name = 'loadtest15', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest15';

insert into OUser set name = 'loadtest16', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest16';

insert into OUser set name = 'loadtest17', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest17';

insert into OUser set name = 'loadtest18', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest18';

insert into OUser set name = 'loadtest19', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest19';

insert into OUser set name = 'loadtest20', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest20';

insert into OUser set name = 'loadtest21', password = 'Passw0rd', status = 'ACTIVE', roles = []; update OUser set roles = (select from orole where name = 'useradmin') where name = 'loadtest21';

update ofunction content {"idempotent":true,"@class":"ofunction","name":"testlock","language":"Javascript","code":"return test.createSyncSum();","parameters":[]} upsert where name='testlock';

create class syncLogSum; create property syncLogSum.rawStartTime DATETIME; create property syncLogSum.rawEndTime DATETIME; create property syncLogSum.cmdStartTime DATETIME; create property syncLogSum.cmdEndTime DATETIME; create property syncLogSum.user LINK OUser;

create index syncLogSum.userCmdStart on syncLogSum (user, cmdStartTime) NOTUNIQUE; create index syncLogSum.userCmdEnd on syncLogSum (user, cmdEndTime) NOTUNIQUE; create index syncLogSum.userRawStart on syncLogSum (user, rawStartTime) NOTUNIQUE; create index syncLogSum.userRawEnd on syncLogSum (user, rawEndTime) NOTUNIQUE;

  1. Unzip run.zip into any folder, and execute sh start.sh and check nohup.txt log, after running for a while, in my enviroment just few seconds, all the requests will hang and server locked cannot take any request.
henryzhao81 commented 9 years ago

issue fixed by Andrey and verified, close it https://github.com/orientechnologies/orientdb/commit/0747aab60cabd63f5ba2da2623f2115a309ad67b