~drizzle-trunk/drizzle/development

« back to all changes in this revision

Viewing changes to plugin/innobase/srv/srv0srv.c

  • Committer: Barry.Leslie at PrimeBase
  • Date: 2010-10-20 20:41:00 UTC
  • mfrom: (1863 staging)
  • mto: This revision was merged to the branch mainline in revision 1871.
  • Revision ID: barry.leslie@primebase.com-20101020204100-oyj6p5cfssjw3p62
Merged with trunk.

Show diffs side-by-side

added added

removed removed

Lines of Context:
102
102
#include "row0mysql.h"
103
103
#include "ha_prototypes.h"
104
104
#include "trx0i_s.h"
 
105
#include "os0sync.h" /* for HAVE_ATOMIC_BUILTINS */
105
106
 
106
107
/* This is set to TRUE if the MySQL user has set it in MySQL; currently
107
108
affects only FOREIGN KEY definition parsing */
333
334
reading of a disk page */
334
335
UNIV_INTERN ulint srv_buf_pool_reads = 0;
335
336
 
336
 
/** Number of sequential read-aheads */
337
 
UNIV_INTERN ulint srv_read_ahead_seq = 0;
338
 
 
339
 
/** Number of random read-aheads */
340
 
UNIV_INTERN ulint srv_read_ahead_rnd = 0;
341
 
 
342
337
/* structure to pass status variables to MySQL */
343
338
UNIV_INTERN export_struc export_vars;
344
339
 
502
497
static ulint   srv_main_flush_loops             = 0;
503
498
/* Log writes involving flush. */
504
499
static ulint   srv_log_writes_and_flush         = 0;
505
 
/* Log writes not including flush. */
506
 
static ulint   srv_log_buffer_writes            = 0;
507
500
 
508
501
/* This is only ever touched by the master thread. It records the
509
502
time when the last flush of log file has happened. The master
752
745
                srv_main_1_second_loops, srv_main_sleeps,
753
746
                srv_main_10_second_loops, srv_main_background_loops,
754
747
                srv_main_flush_loops);
755
 
        fprintf(file, "srv_master_thread log flush and writes: %lu "
756
 
                      " log writes only: %lu\n",
757
 
                      srv_log_writes_and_flush, srv_log_buffer_writes);
 
748
        fprintf(file, "srv_master_thread log flush and writes: %lu\n",
 
749
                      srv_log_writes_and_flush);
758
750
}
759
751
 
760
752
/*********************************************************************//**
1052
1044
}
1053
1045
 
1054
1046
/*********************************************************************//**
1055
 
Frees the OS fast mutex created in srv_init(). */
 
1047
Frees the data structures created in srv_init(). */
1056
1048
UNIV_INTERN
1057
1049
void
1058
1050
srv_free(void)
1059
1051
/*==========*/
1060
1052
{
1061
1053
        os_fast_mutex_free(&srv_conc_mutex);
 
1054
        mem_free(srv_conc_slots);
 
1055
        srv_conc_slots = NULL;
 
1056
 
 
1057
        mem_free(srv_sys->threads);
 
1058
        mem_free(srv_sys);
 
1059
        srv_sys = NULL;
 
1060
 
 
1061
        mem_free(kernel_mutex_temp);
 
1062
        kernel_mutex_temp = NULL;
 
1063
        mem_free(srv_mysql_table);
 
1064
        srv_mysql_table = NULL;
 
1065
 
 
1066
        trx_i_s_cache_free(trx_i_s_cache);
1062
1067
}
1063
1068
 
1064
1069
/*********************************************************************//**
1070
1075
/*==================*/
1071
1076
{
1072
1077
        ut_mem_init();
 
1078
        /* Reset the system variables in the recovery module. */
 
1079
        recv_sys_var_init();
1073
1080
        os_sync_init();
1074
1081
        sync_init();
1075
1082
        mem_init(srv_mem_pool_size);
1915
1922
        export_vars.innodb_data_reads = os_n_file_reads;
1916
1923
        export_vars.innodb_data_writes = os_n_file_writes;
1917
1924
        export_vars.innodb_data_written = srv_data_written;
1918
 
        export_vars.innodb_buffer_pool_read_requests = buf_pool->n_page_gets;
 
1925
        export_vars.innodb_buffer_pool_read_requests = buf_pool->stat.n_page_gets;
1919
1926
        export_vars.innodb_buffer_pool_write_requests
1920
1927
                = srv_buf_pool_write_requests;
1921
1928
        export_vars.innodb_buffer_pool_wait_free = srv_buf_pool_wait_free;
1922
1929
        export_vars.innodb_buffer_pool_pages_flushed = srv_buf_pool_flushed;
1923
1930
        export_vars.innodb_buffer_pool_reads = srv_buf_pool_reads;
1924
 
        export_vars.innodb_buffer_pool_read_ahead_rnd = srv_read_ahead_rnd;
1925
 
        export_vars.innodb_buffer_pool_read_ahead_seq = srv_read_ahead_seq;
 
1931
        export_vars.innodb_buffer_pool_read_ahead
 
1932
                = buf_pool->stat.n_ra_pages_read;
 
1933
        export_vars.innodb_buffer_pool_read_ahead_evicted
 
1934
                = buf_pool->stat.n_ra_pages_evicted;
1926
1935
        export_vars.innodb_buffer_pool_pages_data
1927
1936
                = UT_LIST_GET_LEN(buf_pool->LRU);
1928
1937
        export_vars.innodb_buffer_pool_pages_dirty
1953
1962
        export_vars.innodb_log_writes = srv_log_writes;
1954
1963
        export_vars.innodb_dblwr_pages_written = srv_dblwr_pages_written;
1955
1964
        export_vars.innodb_dblwr_writes = srv_dblwr_writes;
1956
 
        export_vars.innodb_pages_created = buf_pool->n_pages_created;
1957
 
        export_vars.innodb_pages_read = buf_pool->n_pages_read;
1958
 
        export_vars.innodb_pages_written = buf_pool->n_pages_written;
 
1965
        export_vars.innodb_pages_created = buf_pool->stat.n_pages_created;
 
1966
        export_vars.innodb_pages_read = buf_pool->stat.n_pages_read;
 
1967
        export_vars.innodb_pages_written = buf_pool->stat.n_pages_written;
1959
1968
        export_vars.innodb_row_lock_waits = srv_n_lock_wait_count;
1960
1969
        export_vars.innodb_row_lock_current_waits
1961
1970
                = srv_n_lock_wait_current_count;
2322
2331
                log_buffer_sync_in_background(TRUE);
2323
2332
                srv_last_log_flush_time = current_time;
2324
2333
                srv_log_writes_and_flush++;
2325
 
        } else {
2326
 
                /* Actually we don't need to write logs here.
2327
 
                We are just being extra safe here by forcing
2328
 
                the log buffer to log file. */
2329
 
                log_buffer_sync_in_background(FALSE);
2330
 
                srv_log_buffer_writes++;
2331
2334
        }
2332
2335
}
2333
2336
 
2378
2381
 
2379
2382
        srv_main_thread_op_info = "reserving kernel mutex";
2380
2383
 
2381
 
        n_ios_very_old = log_sys->n_log_ios + buf_pool->n_pages_read
2382
 
                + buf_pool->n_pages_written;
 
2384
        n_ios_very_old = log_sys->n_log_ios + buf_pool->stat.n_pages_read
 
2385
                + buf_pool->stat.n_pages_written;
2383
2386
        mutex_enter(&kernel_mutex);
2384
2387
 
2385
2388
        /* Store the user activity counter at the start of this loop */
2399
2402
        skip_sleep = FALSE;
2400
2403
 
2401
2404
        for (i = 0; i < 10; i++) {
2402
 
                n_ios_old = log_sys->n_log_ios + buf_pool->n_pages_read
2403
 
                        + buf_pool->n_pages_written;
 
2405
                n_ios_old = log_sys->n_log_ios + buf_pool->stat.n_pages_read
 
2406
                        + buf_pool->stat.n_pages_written;
2404
2407
                srv_main_thread_op_info = "sleeping";
2405
2408
                srv_main_1_second_loops++;
2406
2409
 
2439
2442
 
2440
2443
                n_pend_ios = buf_get_n_pending_ios()
2441
2444
                        + log_sys->n_pending_writes;
2442
 
                n_ios = log_sys->n_log_ios + buf_pool->n_pages_read
2443
 
                        + buf_pool->n_pages_written;
 
2445
                n_ios = log_sys->n_log_ios + buf_pool->stat.n_pages_read
 
2446
                        + buf_pool->stat.n_pages_written;
2444
2447
                if (n_pend_ios < SRV_PEND_IO_THRESHOLD
2445
2448
                    && (n_ios - n_ios_old < SRV_RECENT_IO_ACTIVITY)) {
2446
2449
                        srv_main_thread_op_info = "doing insert buffer merge";
2456
2459
                        /* Try to keep the number of modified pages in the
2457
2460
                        buffer pool under the limit wished by the user */
2458
2461
 
 
2462
                        srv_main_thread_op_info =
 
2463
                                "flushing buffer pool pages";
2459
2464
                        n_pages_flushed = buf_flush_batch(BUF_FLUSH_LIST,
2460
2465
                                                          PCT_IO(100),
2461
2466
                                                          IB_ULONGLONG_MAX);
2474
2479
                        ulint n_flush = buf_flush_get_desired_flush_rate();
2475
2480
 
2476
2481
                        if (n_flush) {
 
2482
                                srv_main_thread_op_info =
 
2483
                                        "flushing buffer pool pages";
2477
2484
                                n_flush = ut_min(PCT_IO(100), n_flush);
2478
2485
                                n_pages_flushed =
2479
2486
                                        buf_flush_batch(
2511
2518
        are not required, and may be disabled. */
2512
2519
 
2513
2520
        n_pend_ios = buf_get_n_pending_ios() + log_sys->n_pending_writes;
2514
 
        n_ios = log_sys->n_log_ios + buf_pool->n_pages_read
2515
 
                + buf_pool->n_pages_written;
 
2521
        n_ios = log_sys->n_log_ios + buf_pool->stat.n_pages_read
 
2522
                + buf_pool->stat.n_pages_written;
2516
2523
 
2517
2524
        srv_main_10_second_loops++;
2518
2525
        if (n_pend_ios < SRV_PEND_IO_THRESHOLD