====== LucidDB notes for SSB benchmark ====== ===== dba_system_parameters ===== 0: jdbc:luciddb:http://localhost> select * from sys_root.dba_system_parameters; +---------------------------------+-------------------------------------+ | PARAM_NAME | PARAM_VALUE | +---------------------------------+-------------------------------------+ | fennelDisabled | false | | userCatalogEnabled | false | | codeCacheMaxBytes | 2000000 | | checkpointInterval | 0 | | serverRmiRegistryPort | -1 | | serverSingleListenerPort | -1 | | calcVirtualMachine | CALCVM_JAVA | | javaCompilerClassName | org.eigenbase.javac.JaninoCompiler | | connectionTimeoutMillis | 86400000 | | serverHttpPort | -1 | | databaseInitSize | 2000 | | databaseIncrementSize | 1000 | | databaseMaxSize | 0 | | tempInitSize | 3000 | | tempIncrementSize | 1000 | | tempMaxSize | 0 | | databaseShadowLogInitSize | 2000 | | databaseShadowLogIncrementSize | 1000 | | databaseTxnLogInitSize | 2000 | | databaseTxnLogIncrementSize | 1000 | | cachePagesMax | 131072 | | cachePagesInit | 131072 | | cachePageSize | 32768 | | groupCommitInterval | 0 | | resourceDir | ${FARRAGO_HOME}/catalog/fennel | | jniHandleTraceFile | | | expectedConcurrentStatements | 4 | | cacheReservePercentage | 5 | | deviceSchedulerType | aioLinux | | freshmenPageQueuePercentage | 25 | | pageHistoryQueuePercentage | 100 | | prefetchPagesMax | 12 | | prefetchThrottleRate | 10 | | processorCacheBytes | -1 | +---------------------------------+-------------------------------------+ 34 rows selected (1.421 seconds) ===== Create table ===== CREATE TABLE SSB.CUSTOMER ( C_CUSTKEY INTEGER PRIMARY KEY, C_NAME VARCHAR(25) NOT NULL, C_ADDRESS VARCHAR(40) NOT NULL, C_CITY VARCHAR(10) NOT NULL, C_NATION VARCHAR(15) NOT NULL, C_REGION VARCHAR(12) NOT NULL, C_PHONE VARCHAR(15) NOT NULL, C_MKTSEGMENT VARCHAR(10) NOT NULL); CREATE TABLE SSB.DATES ( D_DATEKEY INTEGER PRIMARY KEY, D_DATE VARCHAR(18) NOT NULL, D_DAYOFWEEK VARCHAR(8) NOT NULL, D_MONTH VARCHAR(9) NOT NULL, D_YEAR INTEGER NOT NULL, D_YEARMONTHNUM INTEGER, D_YEARMONTH VARCHAR(7) NOT NULL, D_DAYNUMINWEEK INTEGER, D_DAYNUMINMONTH INTEGER, D_DAYNUMINYEAR INTEGER, D_MONTHNUMINYEAR INTEGER, D_WEEKNUMINYEAR INTEGER, D_SELLINGSEASON VARCHAR(12) NOT NULL, D_LASTDAYINWEEKFL INTEGER, D_LASTDAYINMONTHFL INTEGER, D_HOLIDAYFL INTEGER, D_WEEKDAYFL INTEGER); CREATE TABLE SSB.PART ( P_PARTKEY INTEGER PRIMARY KEY, P_NAME VARCHAR(22) NOT NULL, P_MFGR VARCHAR(6) NOT NULL, P_CATEGORY VARCHAR(7) NOT NULL, P_BRAND VARCHAR(9) NOT NULL, P_COLOR VARCHAR(11) NOT NULL, P_TYPE VARCHAR(25) NOT NULL, P_SIZE INTEGER NOT NULL, P_CONTAINER VARCHAR(10) NOT NULL); CREATE TABLE SSB.SUPPLIER ( S_SUPPKEY INTEGER PRIMARY KEY, S_NAME VARCHAR(25) NOT NULL, S_ADDRESS VARCHAR(25) NOT NULL, S_CITY VARCHAR(10) NOT NULL, S_NATION VARCHAR(15) NOT NULL, S_REGION VARCHAR(12) NOT NULL, S_PHONE VARCHAR(15) NOT NULL); CREATE TABLE SSB.LINEORDER ( LO_ORDERKEY BIGINT, LO_LINENUMBER BIGINT, LO_CUSTKEY INTEGER NOT NULL, LO_PARTKEY INTEGER NOT NULL, LO_SUPPKEY INTEGER NOT NULL, LO_ORDERDATE INTEGER NOT NULL, LO_ORDERPRIOTITY VARCHAR(15) NOT NULL, LO_SHIPPRIOTITY INTEGER, LO_QUANTITY BIGINT, LO_EXTENDEDPRICE BIGINT, LO_ORDTOTALPRICE BIGINT, LO_DISCOUNT BIGINT, LO_REVENUE BIGINT, LO_SUPPLYCOST BIGINT, LO_TAX BIGINT, LO_COMMITDATE INTEGER NOT NULL, LO_SHIPMODE VARCHAR(10) NOT NULL) !set force true alter session set "errorMax" = 1000; alter session set "degreeOfParallelism" = 10; ===== Tips to improve load ===== (by Nicholas Goodman) Raise the ceiling: alter system set "cachePagesMax" = 131072; 2. Restart LucidDB 3. Change cachePagesInit: alter system set "cachePagesInit" = 131072; I preallocated a 100GB db.dat (./lucidDbAlloc). Second, make sure you have cachePagesMax and cachePagesInit set to a reasonable setting. I used 131072 for most server installations for both values. I generated a 10GB dataset (to test the DDL I'm sending to you) tonight. In order to get parallel loading you have to split the file, and then create a view to UNION ALL it. I used the command line "split" to split the file into 8 parts, duplicated the .bcp files, and then create a view like: create view ssb.lineorder_source as select * from ssb."lineorder1" UNION ALL select * from ssb."lineorder2" UNION ALL select * from ssb."lineorder3" UNION ALL select * from ssb."lineorder4" UNION ALL select * from ssb."lineorder5" UNION ALL select * from ssb."lineorder6" UNION ALL select * from ssb."lineorder7" UNION ALL select * from ssb."lineorder8"; ===== Indexes ===== 1/52 set schema 'ssb'; No rows affected (0.023 seconds) 2/52 3/52 --------------------------- 4/52 -- indices for foreign keys 5/52 --------------------------- 6/52 7/52 -- LINEORDER: LO_CUSTKEY, LO_PARTKEY, LO_SUPPKEY, LO_ORDERDATE, LO_COMMITDATE 8/52 CREATE INDEX LO_CUSTKEY_IDX ON LINEORDER(LO_CUSTKEY); No rows affected (78601.04 seconds) 9/52 CREATE INDEX LO_PARTKEY_IDX ON LINEORDER(LO_PARTKEY); No rows affected (126921.698 seconds) 10/52 CREATE INDEX LO_SUPPKEY_IDX ON LINEORDER(LO_SUPPKEY); No rows affected (116387.907 seconds) 11/52 CREATE INDEX LO_ORDERDATE_IDX ON LINEORDER(LO_ORDERDATE); No rows affected (10624.119 seconds) 12/52 CREATE INDEX LO_COMMITDATE_IDX ON LINEORDER(LO_COMMITDATE); No rows affected (34395.341 seconds) 13/52 14/52 ---------------------------- 15/52 -- indices for WHERE clauses 16/52 ---------------------------- 17/52 18/52 -- CUSTOMER: C_REGION, C_NATION, C_CITY 19/52 CREATE INDEX C_REGION_IDX ON CUSTOMER(C_REGION); No rows affected (12.742 seconds) 20/52 CREATE INDEX C_NAITON_IDX ON CUSTOMER(C_NATION); No rows affected (23.238 seconds) 21/52 CREATE INDEX C_CITY_IDX ON CUSTOMER(C_CITY); No rows affected (34.307 seconds) 22/52 23/52 -- DATES: D_YEAR, D_YEARMONTHNUM, D_WEEKNUMINYEAR, D_YEARMONTH 24/52 CREATE INDEX D_YEAR_IDX ON DATES(D_YEAR); No rows affected (0.698 seconds) 25/52 CREATE INDEX D_YEARMONTHNUM_IDX ON DATES(D_YEARMONTHNUM); No rows affected (0.672 seconds) 26/52 CREATE INDEX D_WEEKNUMINYEAR_IDX ON DATES(D_WEEKNUMINYEAR); No rows affected (0.682 seconds) 27/52 CREATE INDEX D_YEARMONTH_IDX ON DATES(D_YEARMONTH); No rows affected (0.699 seconds) 28/52 29/52 -- PART: P_CATEGORY, P_BRAND, P_MFGR 30/52 CREATE INDEX P_CATEGORY_IDX ON PART(P_BRAND); No rows affected (4.071 seconds) 31/52 CREATE INDEX P_BRAND_IDX ON PART(P_BRAND); No rows affected (3.888 seconds) 32/52 CREATE INDEX P_MFGR_IDX ON PART(P_BRAND); No rows affected (4.53 seconds) 33/52 34/52 -- SUPPLIER: S_REGION, S_NATION, S_CITY 35/52 CREATE INDEX S_REGION_IDX ON SUPPLIER(S_REGION); No rows affected (4.612 seconds) 36/52 CREATE INDEX S_NAITON_IDX ON SUPPLIER(S_NATION); No rows affected (6.704 seconds) 37/52 CREATE INDEX S_CITY_IDX ON SUPPLIER(S_CITY); No rows affected (12.992 seconds) 38/52 39/52 -- LINEORDER: LO_QUANTITY, LO_DISCOUNT, 40/52 CREATE INDEX LO_QUANTITY_IDX ON LINEORDER(LO_QUANTITY); No rows affected (8407.526 seconds) 41/52 CREATE INDEX LO_DISCOUNT_IDX ON LINEORDER(LO_DISCOUNT); No rows affected (4954.581 seconds) 42/52 43/52 ----------------- 44/52 -- analyze tables 45/52 ----------------- 46/52 47/52 ANALYZE TABLE CUSTOMER ESTIMATE STATISTICS FOR ALL COLUMNS; No rows affected (13.094 seconds) 48/52 ANALYZE TABLE DATES ESTIMATE STATISTICS FOR ALL COLUMNS; No rows affected (2.74 seconds) 49/52 ANALYZE TABLE PART ESTIMATE STATISTICS FOR ALL COLUMNS; No rows affected (2.303 seconds) 50/52 ANALYZE TABLE SUPPLIER ESTIMATE STATISTICS FOR ALL COLUMNS; No rows affected (4.179 seconds) 51/52 ANALYZE TABLE LINEORDER ESTIMATE STATISTICS FOR ALL COLUMNS; No rows affected (3890.009 seconds) 52/52