Je dois insérer une grande quantité de données dans une table. Est-ce que sqlserver 2008 (par rapport à 2005) a de nouvelles fonctionnalités pour augmenter les performances dans ce cas?SQL Server 2008 - fonctions de réglage des performances pour insérer une grande quantité de données
SQL Server 2008 - fonctions de réglage des performances pour insérer une grande quantité de données
Répondre
Je ne sais pas si cela est faisable pour votre problème, mais si vous le pouvez j'essaierais vraiment de développer ceci dans le code. J'ai eu une question similaire pour un grand projet dans le passé, qui devait importer 15 ans de données de production dans un nouveau schéma (dans SQL Server 2005.) System.Data.SqlClient.SqlBulkCopy était de loin la option la plus rapide.
Si vous allez dans ce sens, je vous suggère de faire des insertions par lots d'environ 1 Go à la fois, puis d'appeler manuellement le .NET GC pour libérer votre table en mémoire. Je suis obligé de faire ces deux choses pour ne pas courir dans les erreurs de mémoire (système 32 bits, bien que.)
Edit - pseudocode pour mon solutiong était quelque chose comme:
Table dataToInsert = new Table();
var sqlCommand = new SqlCommand("select * from old database");
DataReader dataFromOldSystem = sqlCommand.ExecuteReader();
foreach (DataRow oldRow in dataFromOldSystem.Tables[0])
{
// I had to modify/transpose the row from the old table in some way
DataRow newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(2));
dataToInsert.AddRow(newRow);
newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(3));
dataToInsert.AddRow(newRow);
newRow = new DataRow(oldRow.GetInt(0), oldRow.GetDateTime(1), oldRow.GetInt(4));
dataToInsert.AddRow(newRow);
// check if the number of rows is over some magic number that is below the memory limit
// you can check the private bytes in use by your app to help guess this number
if (dataToInsert.Rows.Count > 1000000)
{
SqlBulkCopy bulkCopier = new BulkCopy(blah);
bulkCopier.Execute();
dataToInsert = null;
GC.Finalize();
GC.Free;
dataToInsert = new Table();
}
}
Vous voulez dire.call SQL bulk Copy dans une boucle et appelez GC pour libérer? Si oui, comment puis-je spécifier la taille de la copie en bloc de 1 Go. Avez-vous un exemple de code pour le même? – Relativity
J'ai peur que j'ai déménagé des travaux depuis lors, donc n'ai pas l'échantillon de code. Dans mon cas, j'ai utilisé des essais et des erreurs et quelques suppositions éclairées pour le faire. – Coxy
J'ai ajouté un pseudo-code qui est l'idée de base derrière l'application que j'ai développée. – Coxy
SQL Server 2008 contient l'instruction TSQL MERGE qui peut accélérer certains types d'opérations INSERT, UPDATE et DELETE combinées.
Si vous avez l'intention d'exécuter via le code, je suggère d'utiliser la classe System.Data.SqlClient.SqlBulkCopy (mais également présente dans SQL Server 2005).
Je ne le fais pas par le code. Mais est-il comme fatser SqlBulkCopy que l'insertion de base de données normar ??? Si oui, à quelle vitesse? – Relativity
Vérifiez le Guide de performance de chargement de données http://bit.ly/9Due9T, SqlBulkCopy classe lui-même http://bit.ly/8Xxu2R et le chargement en bloc de haute performance à SQL Server en utilisant SqlBulkCopy http://bit.ly/a9KZ2l si vous toujours concerné. Mais si vous faites avec TSQL alors allez MERGE –
- 1. Performances de requête SQL Server 2000 vs SQL Server 2008
- 2. Berkeley DB Java Edition - réglage pour une grande quantité de données
- 3. supprimer une grande quantité de données
- 4. Supprimer une grande quantité de données dans le serveur SQL
- 5. Performances pour une requête Sql Server ou une procédure stockée pour remplir un lot de données
- 6. Performances des fonctions agrégées sur les jeux de données de grande taille peu changeants
- 7. Gestion des performances de TDE sur SQL Server 2008
- 8. Comment obtenir les meilleures performances avec une grande quantité de données Dans la page aspx?
- 9. transaction SQL affectant une grande quantité de lignes
- 10. J'ai une grande requête pour des performances liées à SQL Server 2005
- 11. Insérer 65535 lignes dans SQL Server 2008
- 12. SQL Server 2008 - Interrogation de données spatiales
- 13. Réglage des paramètres de connexion via ADO pour SQL Server
- 14. Détérioration des performances de SQL Server
- 15. Passer une grande quantité de données dans PHP
- 16. Gérer une grande quantité de données et d'images
- 17. Comment afficher une grande quantité de données rapidement
- 18. Comment transférer une grande quantité de données en utilisant WCF?
- 19. Conception de base de données pour une très grande quantité de données
- 20. Problème de performances SQL Server
- 21. Protection des données SQL Server 2008
- 22. High Runtime pour Dictionary.Add pour une grande quantité d'éléments
- 23. Réglage des performances
- 24. SQL Server: Comparaison des performances de l'index
- 25. ont besoin d'un moyen d'importer une grande quantité de données dans la base de données MySQL
- 26. Transférer/Transformer des données de la base de données SQL Server 2008 vers une autre
- 27. Évaluation des performances de l'installation de SQL Server
- 28. Quelle méthode de pagination (Sql Server 2008) pour des performances optimales?
- 29. Entreposage de données dans SQL Server 2008
- 30. Tests de performances SQL Server
« Je dois insérer grande quantité de données dans une table. " - peut-être voudriez-vous expliquer comment vous avez l'intention de le faire? il y a plusieurs façons ... –
J'insère en utilisant une procédure stockée, dans laquelle j'ai insérer une instruction Select. – Relativity