MySQL importing CSV files really slow

The name of the pictureThe name of the pictureThe name of the pictureClash Royale CLAN TAG#URR8PPP





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;








3















I am trying to import CSV files into a table, but it has been very slow. I have about 1000 files with a file size of 40 MB each. Whenever I try to import it, I can see with for example MySQL workbench that it is inserting in a rate of about 30 - 60 rows per second. It will take ages before al my files are processed. How can I speed this up? I have already modified the mysql.cnf file to the following config, which unfortunately does not speed it up:



/etc/mysql/conf.d/mysql.cnf



[mysqld]
innodb_buffer_pool_size=12G
innodb_io_capacity = 2000
innodb_read_io_threads = 48
innodb_thread_concurrency = 0
innodb_write_io_threads = 48
innodb_buffer_pool_size=12G
innodb_log_file_size = 512M
max_connections = 1000
max_allowed_packet = 128M
#key_buffer = 1000M
bulk_insert_buffer_size = 1024M
innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 4000M


It does say that 12G is configured in InnoDB according to PHPMyAdmin, so I can safely confirm that the config at least works.



Specs in case needed:



OS: Ubuntu 18.04
CPU: 6 cores, 12 threads @ 4.5 GHz
RAM: 32 GB DDR4 @ 3.2 GHz
SSD: 1 TB NVME @ 3.5 GB/s Read & 3.3 GB/s Write









share|improve this question






















  • How do you do the inserts? One by one? Does the table have any indexes?

    – vidarlo
    Mar 10 at 20:04











  • The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

    – Mark D
    Mar 10 at 20:07

















3















I am trying to import CSV files into a table, but it has been very slow. I have about 1000 files with a file size of 40 MB each. Whenever I try to import it, I can see with for example MySQL workbench that it is inserting in a rate of about 30 - 60 rows per second. It will take ages before al my files are processed. How can I speed this up? I have already modified the mysql.cnf file to the following config, which unfortunately does not speed it up:



/etc/mysql/conf.d/mysql.cnf



[mysqld]
innodb_buffer_pool_size=12G
innodb_io_capacity = 2000
innodb_read_io_threads = 48
innodb_thread_concurrency = 0
innodb_write_io_threads = 48
innodb_buffer_pool_size=12G
innodb_log_file_size = 512M
max_connections = 1000
max_allowed_packet = 128M
#key_buffer = 1000M
bulk_insert_buffer_size = 1024M
innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 4000M


It does say that 12G is configured in InnoDB according to PHPMyAdmin, so I can safely confirm that the config at least works.



Specs in case needed:



OS: Ubuntu 18.04
CPU: 6 cores, 12 threads @ 4.5 GHz
RAM: 32 GB DDR4 @ 3.2 GHz
SSD: 1 TB NVME @ 3.5 GB/s Read & 3.3 GB/s Write









share|improve this question






















  • How do you do the inserts? One by one? Does the table have any indexes?

    – vidarlo
    Mar 10 at 20:04











  • The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

    – Mark D
    Mar 10 at 20:07













3












3








3








I am trying to import CSV files into a table, but it has been very slow. I have about 1000 files with a file size of 40 MB each. Whenever I try to import it, I can see with for example MySQL workbench that it is inserting in a rate of about 30 - 60 rows per second. It will take ages before al my files are processed. How can I speed this up? I have already modified the mysql.cnf file to the following config, which unfortunately does not speed it up:



/etc/mysql/conf.d/mysql.cnf



[mysqld]
innodb_buffer_pool_size=12G
innodb_io_capacity = 2000
innodb_read_io_threads = 48
innodb_thread_concurrency = 0
innodb_write_io_threads = 48
innodb_buffer_pool_size=12G
innodb_log_file_size = 512M
max_connections = 1000
max_allowed_packet = 128M
#key_buffer = 1000M
bulk_insert_buffer_size = 1024M
innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 4000M


It does say that 12G is configured in InnoDB according to PHPMyAdmin, so I can safely confirm that the config at least works.



Specs in case needed:



OS: Ubuntu 18.04
CPU: 6 cores, 12 threads @ 4.5 GHz
RAM: 32 GB DDR4 @ 3.2 GHz
SSD: 1 TB NVME @ 3.5 GB/s Read & 3.3 GB/s Write









share|improve this question














I am trying to import CSV files into a table, but it has been very slow. I have about 1000 files with a file size of 40 MB each. Whenever I try to import it, I can see with for example MySQL workbench that it is inserting in a rate of about 30 - 60 rows per second. It will take ages before al my files are processed. How can I speed this up? I have already modified the mysql.cnf file to the following config, which unfortunately does not speed it up:



/etc/mysql/conf.d/mysql.cnf



[mysqld]
innodb_buffer_pool_size=12G
innodb_io_capacity = 2000
innodb_read_io_threads = 48
innodb_thread_concurrency = 0
innodb_write_io_threads = 48
innodb_buffer_pool_size=12G
innodb_log_file_size = 512M
max_connections = 1000
max_allowed_packet = 128M
#key_buffer = 1000M
bulk_insert_buffer_size = 1024M
innodb_doublewrite = 0
innodb_flush_log_at_trx_commit = 2
key_buffer_size = 4000M


It does say that 12G is configured in InnoDB according to PHPMyAdmin, so I can safely confirm that the config at least works.



Specs in case needed:



OS: Ubuntu 18.04
CPU: 6 cores, 12 threads @ 4.5 GHz
RAM: 32 GB DDR4 @ 3.2 GHz
SSD: 1 TB NVME @ 3.5 GB/s Read & 3.3 GB/s Write






18.04 mysql phpmyadmin mysql-workbench csv






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Mar 10 at 19:48









Mark DMark D

1364




1364












  • How do you do the inserts? One by one? Does the table have any indexes?

    – vidarlo
    Mar 10 at 20:04











  • The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

    – Mark D
    Mar 10 at 20:07

















  • How do you do the inserts? One by one? Does the table have any indexes?

    – vidarlo
    Mar 10 at 20:04











  • The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

    – Mark D
    Mar 10 at 20:07
















How do you do the inserts? One by one? Does the table have any indexes?

– vidarlo
Mar 10 at 20:04





How do you do the inserts? One by one? Does the table have any indexes?

– vidarlo
Mar 10 at 20:04













The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

– Mark D
Mar 10 at 20:07





The inserts go one by one (Using Jetbrains Datagrip for it as phpmyadmin is very slow), and the table does not have any index to my knowledge

– Mark D
Mar 10 at 20:07










2 Answers
2






active

oldest

votes


















5














You should have a look at the LOAD DATA function of MySQL, or the mysqlimport tool.



Those two functions are reportedly 20-30 times faster than insert'ing one by one, which would bring you up to at least 500-1000 rows a second.



As you don't provide any information about your data format, it's hard to give a detailed use instruction for mysqlimport, which seems to be the most applicable tool in your situation.






share|improve this answer






























    2














    It turned out that the file encoding was different between each file. Some files had UTF-8 encoding, some had ISO 8859-1 (Latin1) encoding, which caused a lot of programs to take ages to import due to (I think) converting it into another encoding. A 40 MB file now only takes about 6 seconds to import instead of 48 minutes.. Thanks @vidarlo for the suggestion of mysqlimport, which is certainly an improvement, but overall the time improvement is good enough for me!






    share|improve this answer























      Your Answer








      StackExchange.ready(function()
      var channelOptions =
      tags: "".split(" "),
      id: "89"
      ;
      initTagRenderer("".split(" "), "".split(" "), channelOptions);

      StackExchange.using("externalEditor", function()
      // Have to fire editor after snippets, if snippets enabled
      if (StackExchange.settings.snippets.snippetsEnabled)
      StackExchange.using("snippets", function()
      createEditor();
      );

      else
      createEditor();

      );

      function createEditor()
      StackExchange.prepareEditor(
      heartbeatType: 'answer',
      autoActivateHeartbeat: false,
      convertImagesToLinks: true,
      noModals: true,
      showLowRepImageUploadWarning: true,
      reputationToPostImages: 10,
      bindNavPrevention: true,
      postfix: "",
      imageUploader:
      brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
      contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
      allowUrls: true
      ,
      onDemand: true,
      discardSelector: ".discard-answer"
      ,immediatelyShowMarkdownHelp:true
      );



      );













      draft saved

      draft discarded


















      StackExchange.ready(
      function ()
      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1124589%2fmysql-importing-csv-files-really-slow%23new-answer', 'question_page');

      );

      Post as a guest















      Required, but never shown

























      2 Answers
      2






      active

      oldest

      votes








      2 Answers
      2






      active

      oldest

      votes









      active

      oldest

      votes






      active

      oldest

      votes









      5














      You should have a look at the LOAD DATA function of MySQL, or the mysqlimport tool.



      Those two functions are reportedly 20-30 times faster than insert'ing one by one, which would bring you up to at least 500-1000 rows a second.



      As you don't provide any information about your data format, it's hard to give a detailed use instruction for mysqlimport, which seems to be the most applicable tool in your situation.






      share|improve this answer



























        5














        You should have a look at the LOAD DATA function of MySQL, or the mysqlimport tool.



        Those two functions are reportedly 20-30 times faster than insert'ing one by one, which would bring you up to at least 500-1000 rows a second.



        As you don't provide any information about your data format, it's hard to give a detailed use instruction for mysqlimport, which seems to be the most applicable tool in your situation.






        share|improve this answer

























          5












          5








          5







          You should have a look at the LOAD DATA function of MySQL, or the mysqlimport tool.



          Those two functions are reportedly 20-30 times faster than insert'ing one by one, which would bring you up to at least 500-1000 rows a second.



          As you don't provide any information about your data format, it's hard to give a detailed use instruction for mysqlimport, which seems to be the most applicable tool in your situation.






          share|improve this answer













          You should have a look at the LOAD DATA function of MySQL, or the mysqlimport tool.



          Those two functions are reportedly 20-30 times faster than insert'ing one by one, which would bring you up to at least 500-1000 rows a second.



          As you don't provide any information about your data format, it's hard to give a detailed use instruction for mysqlimport, which seems to be the most applicable tool in your situation.







          share|improve this answer












          share|improve this answer



          share|improve this answer










          answered Mar 10 at 20:09









          vidarlovidarlo

          10.7k52852




          10.7k52852























              2














              It turned out that the file encoding was different between each file. Some files had UTF-8 encoding, some had ISO 8859-1 (Latin1) encoding, which caused a lot of programs to take ages to import due to (I think) converting it into another encoding. A 40 MB file now only takes about 6 seconds to import instead of 48 minutes.. Thanks @vidarlo for the suggestion of mysqlimport, which is certainly an improvement, but overall the time improvement is good enough for me!






              share|improve this answer



























                2














                It turned out that the file encoding was different between each file. Some files had UTF-8 encoding, some had ISO 8859-1 (Latin1) encoding, which caused a lot of programs to take ages to import due to (I think) converting it into another encoding. A 40 MB file now only takes about 6 seconds to import instead of 48 minutes.. Thanks @vidarlo for the suggestion of mysqlimport, which is certainly an improvement, but overall the time improvement is good enough for me!






                share|improve this answer

























                  2












                  2








                  2







                  It turned out that the file encoding was different between each file. Some files had UTF-8 encoding, some had ISO 8859-1 (Latin1) encoding, which caused a lot of programs to take ages to import due to (I think) converting it into another encoding. A 40 MB file now only takes about 6 seconds to import instead of 48 minutes.. Thanks @vidarlo for the suggestion of mysqlimport, which is certainly an improvement, but overall the time improvement is good enough for me!






                  share|improve this answer













                  It turned out that the file encoding was different between each file. Some files had UTF-8 encoding, some had ISO 8859-1 (Latin1) encoding, which caused a lot of programs to take ages to import due to (I think) converting it into another encoding. A 40 MB file now only takes about 6 seconds to import instead of 48 minutes.. Thanks @vidarlo for the suggestion of mysqlimport, which is certainly an improvement, but overall the time improvement is good enough for me!







                  share|improve this answer












                  share|improve this answer



                  share|improve this answer










                  answered Mar 10 at 21:09









                  Mark DMark D

                  1364




                  1364



























                      draft saved

                      draft discarded
















































                      Thanks for contributing an answer to Ask Ubuntu!


                      • Please be sure to answer the question. Provide details and share your research!

                      But avoid


                      • Asking for help, clarification, or responding to other answers.

                      • Making statements based on opinion; back them up with references or personal experience.

                      To learn more, see our tips on writing great answers.




                      draft saved


                      draft discarded














                      StackExchange.ready(
                      function ()
                      StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2faskubuntu.com%2fquestions%2f1124589%2fmysql-importing-csv-files-really-slow%23new-answer', 'question_page');

                      );

                      Post as a guest















                      Required, but never shown





















































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown

































                      Required, but never shown














                      Required, but never shown












                      Required, but never shown







                      Required, but never shown






                      Popular posts from this blog

                      How to check contact read email or not when send email to Individual?

                      Displaying single band from multi-band raster using QGIS

                      How many registers does an x86_64 CPU actually have?