MySQL插入上的定期“打开表”

时间:2015-03-04 15:59:57

标签: mysql

我有一个长时间运行的插入,显示在“NULL”和“打开表格”之间切换的状态

|  5 | mckelvey | mushroom.jpl.nasa.gov:57050 | smap_ampcs_v5_2_0 | Query   | 7105 | Opening tables | INSERT INTO ChannelValue

|  5 | mckelvey | mushroom.jpl.nasa.gov:57050 | smap_ampcs_v5_2_0 | Query   | 7114 | NULL  | INSERT INTO ChannelValue

它不断地这样做。显示打开的表格显示10个已打开的表格,5个正在使用 全局状态“Opened_tables”为190并且不会增加。 table_open_cache是​​1024。

有什么不对吗?为什么它一直在为正在进行的插入打开表?

插页如下。 v4数据库中的表是MyISAM,v5_2是InnoDB。 ComboParent是临时的和MyISAM。服务器日志中没有错误。

INSERT INTO ChannelValue
     SELECT
         cv.sessionId,
         cv.hostId,
         cv.sessionFragment,
         1 AS id,
         cv.id AS channelDataId,
         cp.parentId,
         NULL AS uniqueId,
         IF (cv.dnUnsignedValue IS NOT NULL,
             CONVERT(cv.dnUnsignedValue, SIGNED),
             cv.dnIntegerValue) AS dnPackedValue,
         cv.dnDoubleValue,
         sv.stringId,
         cv.eu,
         SET_FLAGS(cv.dnDoubleFlag,
                   cv.euFlag,
                   cv.dnAlarmState,
                   cv.euAlarmState,
                   cv.dnUnsignedValue) AS flags
    FROM smap_ampcs_v4_0_0.ChannelValue AS cv
    STRAIGHT_JOIN ComboParent AS cp
    ON ((cv.sessionId       = cp.sessionId)       AND
        (cv.hostId          = cp.hostId)          AND
        (cv.sessionFragment = cp.sessionFragment) AND
        (cv.sclkCoarse      = cp.sclkCoarse)      AND
        (cv.sclkFine        = cp.sclkFine)        AND
        (cv.ertCoarse       = cp.ertCoarse)       AND
        (cv.ertFine         = cp.ertFine)         AND
        (cv.scetCoarse      = cp.scetCoarse)      AND
        (cv.scetFine        = cp.scetFine)        AND
        (cv.dssId           = cp.dssId)           AND
        (cv.vcid            <=> cp.vcid)          AND
        (cv.isRealtime      = cp.isRealtime))
    LEFT JOIN StringValue AS sv
    ON (
        (cv.hostId          = sv.hostId)          AND
        (cv.sessionId       = sv.sessionId)       AND
        (cv.sessionFragment = sv.sessionFragment) AND
        (0                  = sv.fromSse)         AND
        (cv.dnStringValue   = sv.stringValue)
       )
    WHERE (cv.packetId IS NULL)

0 个答案:

没有答案