⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tsbtrold5.c

📁 Mysql for Windows最新源码
💻 C
字号:
/************************************************************************The test for the index tree(c) 1994-1996 Innobase OyCreated 2/16/1996 Heikki Tuuri*************************************************************************/#include "sync0sync.h"#include "ut0mem.h"#include "mem0mem.h"#include "data0data.h"#include "data0type.h"#include "dict0dict.h"#include "buf0buf.h"#include "os0file.h"#include "fil0fil.h"#include "fsp0fsp.h"#include "rem0rec.h"#include "rem0cmp.h"#include "mtr0mtr.h"#include "log0log.h"#include "page0page.h"#include "page0cur.h"#include "..\btr0btr.h"#include "..\btr0cur.h"#include "..\btr0pcur.h"os_file_t	files[1000];mutex_t		ios_mutex;ulint		ios;ulint		n[10];mutex_t		incs_mutex;ulint		incs;byte		bigbuf[1000000];#define N_SPACES	1#define N_FILES		2#define FILE_SIZE	1000 	/* must be > 512 */#define POOL_SIZE	1000#define	COUNTER_OFFSET	1500#define LOOP_SIZE	150#define	N_THREADS	5ulint zero = 0;buf_block_t*	bl_arr[POOL_SIZE];/************************************************************************Io-handler thread function. */ulinthandler_thread(/*===========*/	void*	arg){	ulint	segment;	void*	mess;	ulint	i;	bool	ret;		segment = *((ulint*)arg);	printf("Io handler thread %lu starts\n", segment);	for (i = 0;; i++) {		ret = fil_aio_wait(segment, &mess);		ut_a(ret);		buf_page_io_complete((buf_block_t*)mess);				mutex_enter(&ios_mutex);		ios++;		mutex_exit(&ios_mutex);			}	return(0);}/*************************************************************************Creates the files for the file system test and inserts them tothe file system. */voidcreate_files(void)/*==============*/{	bool		ret;	ulint		i, k;	char		name[20];	os_thread_t	thr[5];	os_thread_id_t	id[5];	printf("--------------------------------------------------------\n");	printf("Create or open database files\n");	strcpy(name, "j:\\tsfile00");	for (k = 0; k < N_SPACES; k++) {	for (i = 0; i < N_FILES; i++) {		name[9] = (char)((ulint)'0' + k);		name[10] = (char)((ulint)'0' + i);			files[i] = os_file_create(name, OS_FILE_CREATE,					OS_FILE_TABLESPACE, &ret);		if (ret == FALSE) {			ut_a(os_file_get_last_error() ==						OS_FILE_ALREADY_EXISTS);				files[i] = os_file_create(				name, OS_FILE_OPEN,						OS_FILE_TABLESPACE, &ret);			ut_a(ret);		}		ret = os_file_close(files[i]);		ut_a(ret);		if (i == 0) {			fil_space_create(name, k, OS_FILE_TABLESPACE);		}		ut_a(fil_validate());		fil_node_create(name, FILE_SIZE, k);	}	}	ios = 0;	mutex_create(&ios_mutex);		for (i = 0; i < 5; i++) {		n[i] = i;		thr[i] = os_thread_create(handler_thread, n + i, id + i);	}}/************************************************************************Inits space header of space 0. */voidinit_space(void)/*============*/{	mtr_t		mtr;	printf("Init space header\n");		mtr_start(&mtr);	fsp_header_init(0, FILE_SIZE * N_FILES, &mtr);			mtr_commit(&mtr);}/*********************************************************************Test for index page. */void test1(void)/*=======*/{	dtuple_t*	tuple;	mem_heap_t*	heap;	ulint		rnd	= 0;	dict_index_t*	index;		dict_table_t*	table;	dict_tree_t*	tree;	mtr_t		mtr;	byte		buf[8];	ulint		i;	ulint		tm, oldtm;	btr_pcur_t	cursor;		printf("-------------------------------------------------\n");	printf("TEST 1. Basic test\n");	heap = mem_heap_create(0);		table = dict_mem_table_create("TS_TABLE1", 2);	dict_mem_table_add_col(table, "COL1", DATA_VARCHAR, DATA_ENGLISH, 10, 0);	dict_mem_table_add_col(table, "COL2", DATA_VARCHAR, DATA_ENGLISH, 10, 0);	dict_table_add_to_cache(table);	index = dict_mem_index_create("TS_TABLE1", "IND1", 0, 2, 0);	dict_mem_index_add_field(index, "COL1", 0);	dict_mem_index_add_field(index, "COL2", 0);	dict_index_add_to_cache(index);	index = dict_index_get("TS_TABLE1", "IND1");	ut_a(index);	tree = dict_index_get_tree(index);		tuple = dtuple_create(heap, 3);	mtr_start(&mtr);		btr_root_create(tree, 0, &mtr);	mtr_commit(&mtr);	mtr_start(&mtr);			dtuple_gen_test_tuple3(tuple, 0, buf);	btr_insert(tree, tuple, &mtr);	mtr_commit(&mtr);	rnd = 90000;	oldtm = ut_clock();		for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {			mtr_start(&mtr);		if (i == 77000) {			rnd = rnd % 200000;		}		rnd = (rnd + 15675751) % 200000;				dtuple_gen_test_tuple3(tuple, rnd, buf);		btr_insert(tree, tuple, &mtr);		mtr_commit(&mtr);	}	tm = ut_clock();	printf("Wall time for test %lu milliseconds\n", tm - oldtm);	rnd = 90000;	oldtm = ut_clock();		for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {			mtr_start(&mtr);		if (i == 50000) {			rnd = rnd % 200000;		}		rnd = (rnd + 595659561) % 200000;				dtuple_gen_test_tuple3(tuple, rnd, buf);		btr_pcur_open(tree, tuple, PAGE_CUR_GE,					BTR_SEARCH_LEAF, &cursor, &mtr);		mtr_commit(&mtr);	}	tm = ut_clock();	printf("Wall time for test %lu milliseconds\n", tm - oldtm);	rnd = 0;	oldtm = ut_clock();		for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {			mtr_start(&mtr);		rnd = (rnd + 35608971) % 200000 + 1;				dtuple_gen_test_tuple3(tuple, rnd, buf);		mtr_commit(&mtr);	}	tm = ut_clock();	printf("Wall time for test %lu milliseconds\n", tm - oldtm);	/*	btr_print_tree(tree, 3); */	mem_heap_free(heap);}#ifdef notdefined		mtr_start(&mtr);	block = buf_page_create(0, 5, &mtr);	buf_page_x_lock(block, &mtr);	frame = buf_block_get_frame(block);	page = page_create(frame, &mtr);	for (i = 0; i < 512; i++) {		rnd = (rnd + 534671) % 512;		if (i % 27 == 0) {			ut_a(page_validate(page, index));		}			dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}/*	page_print_list(page, 151); */	ut_a(page_validate(page, index));	ut_a(page_get_n_recs(page) == 512);	for (i = 0; i < 512; i++) {		rnd = (rnd + 7771) % 512;			if (i % 27 == 0) {			ut_a(page_validate(page, index));		}		dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		page_cur_delete_rec(&cursor, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}	ut_a(page_get_n_recs(page) == 0);	ut_a(page_validate(page, index));	page = page_create(frame, &mtr);	rnd = 311;		for (i = 0; i < 512; i++) {		rnd = (rnd + 1) % 512;		if (i % 27 == 0) {			ut_a(page_validate(page, index));		}			dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}	ut_a(page_validate(page, index));	ut_a(page_get_n_recs(page) == 512);	rnd = 217;	for (i = 0; i < 512; i++) {		rnd = (rnd + 1) % 512;			if (i % 27 == 0) {			ut_a(page_validate(page, index));		}		dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		page_cur_delete_rec(&cursor, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}	ut_a(page_validate(page, index));	ut_a(page_get_n_recs(page) == 0);	page = page_create(frame, &mtr);	rnd = 291;		for (i = 0; i < 512; i++) {		rnd = (rnd - 1) % 512;		if (i % 27 == 0) {			ut_a(page_validate(page, index));		}			dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}	ut_a(page_validate(page, index));	ut_a(page_get_n_recs(page) == 512);	rnd = 277;	for (i = 0; i < 512; i++) {		rnd = (rnd - 1) % 512;			if (i % 27 == 0) {			ut_a(page_validate(page, index));		}		dtuple_gen_test_tuple(tuple, rnd);/*		dtuple_print(tuple);*/		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		page_cur_delete_rec(&cursor, &mtr);		ut_a(rec);		rec_validate(rec);/*		page_print_list(page, 151); */	}	ut_a(page_validate(page, index));	ut_a(page_get_n_recs(page) == 0);	mtr_commit(&mtr);	mem_heap_free(heap);}/*********************************************************************Test for index page. */void test2(void)/*=======*/{	page_t*		page;	dtuple_t*	tuple;	mem_heap_t*	heap;	ulint		i, j;	ulint		rnd	= 0;	rec_t*		rec;	page_cur_t	cursor;	dict_index_t*	index;		dict_table_t*	table;	buf_block_t*	block;	buf_frame_t*	frame;	ulint		tm, oldtm;	byte		buf[8];	mtr_t		mtr;		printf("-------------------------------------------------\n");	printf("TEST 2. Speed test\n");		oldtm = ut_clock();		for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {		ut_memcpy(bigbuf, bigbuf + 800, 800);	}	tm = ut_clock();	printf("Wall time for %lu mem copys of 800 bytes %lu millisecs\n",			i, tm - oldtm);	oldtm = ut_clock();	rnd = 0;	for (i = 0; i < 1000 * UNIV_DBC * UNIV_DBC; i++) {		ut_memcpy(bigbuf + rnd, bigbuf + rnd + 800, 800);		rnd += 1600;		if (rnd > 995000) {			rnd = 0;		}	}	tm = ut_clock();	printf("Wall time for %lu mem copys of 800 bytes %lu millisecs\n",			i, tm - oldtm);				heap = mem_heap_create(0);		table = dict_table_create("TS_TABLE2", 2);	dict_table_add_col(table, "COL1", DATA_VARCHAR, DATA_ENGLISH, 10, 0);	dict_table_add_col(table, "COL2", DATA_VARCHAR, DATA_ENGLISH, 10, 0);	ut_a(0 == dict_table_publish(table));	index = dict_index_create("TS_TABLE2", "IND2", 0, 2, 0);	dict_index_add_field(index, "COL1", 0);	dict_index_add_field(index, "COL2", 0);	ut_a(0 == dict_index_publish(index));	index = dict_index_get("TS_TABLE2", "IND2");	ut_a(index);		tuple = dtuple_create(heap, 2);	oldtm = ut_clock();		rnd = 677;	for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		mtr_start(&mtr);		block = buf_page_create(0, 5, &mtr);		buf_page_x_lock(block, &mtr);		frame = buf_block_get_frame(block);		page = page_create(frame, &mtr);		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);			rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);			ut_a(rec);		}		mtr_commit(&mtr);	}	tm = ut_clock();	printf("Wall time for insertion of %lu recs %lu milliseconds\n",			i * j, tm - oldtm);	mtr_start(&mtr);	block = buf_page_get(0, 5, &mtr);	buf_page_s_lock(block, &mtr);	page = buf_block_get_frame(block);	ut_a(page_validate(page, index));	mtr_commit(&mtr);		oldtm = ut_clock();		rnd = 677;	for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		mtr_start(&mtr);		block = buf_page_create(0, 5, &mtr);		buf_page_x_lock(block, &mtr);		frame = buf_block_get_frame(block);		page = page_create(frame, &mtr);		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);		}		mtr_commit(&mtr);	}	tm = ut_clock();	printf(	"Wall time for %lu empty loops with page create %lu milliseconds\n",			i * j, tm - oldtm);	oldtm = ut_clock();		for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		mtr_start(&mtr);		block = buf_page_create(0, 5, &mtr);		buf_page_x_lock(block, &mtr);		frame = buf_block_get_frame(block);		page = page_create(frame, &mtr);		rnd = 100;		for (j = 0; j < 250; j++) {			rnd = (rnd + 1) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);			rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);			ut_a(rec);		}		mtr_commit(&mtr);	}	tm = ut_clock();	printf(	"Wall time for sequential insertion of %lu recs %lu milliseconds\n",			i * j, tm - oldtm);	oldtm = ut_clock();		for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		mtr_start(&mtr);		block = buf_page_create(0, 5, &mtr);		buf_page_x_lock(block, &mtr);		frame = buf_block_get_frame(block);		page = page_create(frame, &mtr);		rnd = 500;		for (j = 0; j < 250; j++) {			rnd = (rnd - 1) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);			rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);			ut_a(rec);		}		mtr_commit(&mtr);	}	tm = ut_clock();	printf(	"Wall time for descend. seq. insertion of %lu recs %lu milliseconds\n",			i * j, tm - oldtm);	oldtm = ut_clock();		for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		mtr_start(&mtr);		block = buf_page_create(0, 5, &mtr);		buf_page_x_lock(block, &mtr);		frame = buf_block_get_frame(block);		page = page_create(frame, &mtr);		rnd = 677;		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);			rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);			ut_a(rec);		}		rnd = 677;		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);			page_cur_delete_rec(&cursor, &mtr);		}		ut_a(page_get_n_recs(page) == 0);		mtr_commit(&mtr);	}	tm = ut_clock();	printf("Wall time for insert and delete of %lu recs %lu milliseconds\n",			i * j, tm - oldtm);	mtr_start(&mtr);	block = buf_page_create(0, 5, &mtr);	buf_page_x_lock(block, &mtr);	frame = buf_block_get_frame(block);	page = page_create(frame, &mtr);	rnd = 677;	for (j = 0; j < 250; j++) {		rnd = (rnd + 54841) % 1000;		dtuple_gen_test_tuple2(tuple, rnd, buf);		page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		rec = page_cur_insert_rec(&cursor, tuple, NULL, &mtr);		ut_a(rec);	}	ut_a(page_validate(page, index));	mtr_print(&mtr);		oldtm = ut_clock();		for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		rnd = 677;		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);			page_cur_search(page, tuple, PAGE_CUR_G, &cursor);		}	}	tm = ut_clock();	printf("Wall time for search of %lu recs %lu milliseconds\n",			i * j, tm - oldtm);	oldtm = ut_clock();		for (i = 0; i < 4 * UNIV_DBC * UNIV_DBC; i++) {		rnd = 677;		for (j = 0; j < 250; j++) {			rnd = (rnd + 54841) % 1000;			dtuple_gen_test_tuple2(tuple, rnd, buf);		}	}	tm = ut_clock();	printf("Wall time for %lu empty loops %lu milliseconds\n",			i * j, tm - oldtm);	mtr_commit(&mtr);}#endif/********************************************************************Main test function. */void main(void) /*======*/{	ulint	tm, oldtm;	sync_init();	mem_init();	os_aio_init(160, 5);	fil_init(25);	buf_pool_init(POOL_SIZE, POOL_SIZE);	dict_init();	fsp_init();	log_init();		create_files();	init_space();		oldtm = ut_clock();		ut_rnd_set_seed(19);	test1();/*	mem_print_info(); */		tm = ut_clock();	printf("Wall time for test %lu milliseconds\n", tm - oldtm);	printf("TESTS COMPLETED SUCCESSFULLY!\n");} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -