Details

    • Type: Task
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Fix versions: 5.3.8
    • Components: None
    • Labels:
    • Sprint:

      Description

      It can be dangerous to run "set read_only" on a production server because it can block in close_cached_tables. More details about the pain this caused previously are at:
      http://mysqlha.blogspot.com/2008/07/what-exactly-does-flush-tables-with.html

      Per the code in set_var.cc:

       /*
          Perform a 'FLUSH TABLES WITH READ LOCK'.
          This is a 3 step process:
          - [1] lock_global_read_lock()
          - [2] close_cached_tables()
          - [3] make_global_read_lock_block_commit()
          [1] prevents new connections from obtaining tables locked for write.
          [2] waits until all existing connections close their tables.
          [3] prevents transactions from being committed.
        */
      

      Can there be a variant that doesn't do #2? My workload doesn't use MyISAM and I don't know if #2 is done because of MyISAM. Calling close_cached_tables seems like a heavy way to force LOCK TABLEs to be unlocked. Any long running queries will cause #2 to block.

      See also http://lists.mysql.com/commits/142825

        Attachments

          Issue links

            Activity

              People

              • Assignee:
                holyfoot Alexey Botchkov
                Reporter:
                ratzpo Rasmus Johansson
              • Votes:
                0 Vote for this issue
                Watchers:
                5 Start watching this issue

                Dates

                • Due:
                  Created:
                  Updated:
                  Resolved:

                  Time Tracking

                  Estimated:
                  Original Estimate - 2 days Original Estimate - 2 days
                  2d
                  Remaining:
                  Remaining Estimate - 0 minutes
                  0m
                  Logged:
                  Time Spent - 2 days, 5 hours
                  2d 5h